为了账号安全,请及时绑定邮箱和手机立即绑定

Python 数据框中的名称可以同时具有两个值

Python 数据框中的名称可以同时具有两个值

哆啦的时光机 2023-05-16 15:07:26
我有一个像这样的数据框df.head()NAME     DATE             FLAGTest1    1 April 2020     BeforeTest2    20 May 2020      BeforeTest1    28 May 2020      BeforeTest3    2 June 2020      AfterTest2    3 June 2020      After我想创建另一个数据框,其中包含具有标志值“之前”但不是“之后”的名称列表,就像在集合中一样,它类似于 A intersection B-complement。使用上面的 df 数据框,我将在我的新数据框中只获得一个名称 - Test1。我正在为如何构建逻辑和使用什么功能而苦苦挣扎。我应该使用循环遍历所有值还是根据标志值分离数据帧并执行设置操作?只是在寻找可行的解决方案
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

你只需要做两个过滤器;第一个过滤器检查flag,然后第二个过滤器删除任何有 after 标志的东西:


import pandas as pd                                                                                                                                                                                    

df = pd.DataFrame({'name': ['test1', 'test2', 'test3', 'test1', 'test2'], 'flag':['before', 'before', 'after', 'before', 'after']})       

df[~df.name.isin(df[df.flag=='after']['name'])]                                                                                                                                                       

 

    name    flag

0  test1  before

3  test1  before


查看完整回答
反对 回复 2023-05-16
?
慕容3067478

TA贡献1773条经验 获得超3个赞

这是一种使用 的方法.loc[],它可以在某些情况下防止SettingWithCopyWarning警告(这在这里可能不是问题)。


# Find the NAME such that FLAG == After:

after = df.loc[ df['FLAG'] == 'After', 'NAME' ]


# Filter rows (before comma in .loc[]) and select columns (after comma)

before = df.loc[~df['NAME'].isin(after), ['NAME', 'DATE']]


print(before)

    NAME          DATE

0  Test1  1 April 2020

2  Test1   28 May 2020


查看完整回答
反对 回复 2023-05-16
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信