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

我有一个像这样的数据框


df.head()

NAME     DATE             FLAG

Test1    1 April 2020     Before

Test2    20 May 2020      Before

Test1    28 May 2020      Before

Test3    2 June 2020      After

Test2    3 June 2020      After

我想创建另一个数据框,其中包含具有标志值“之前”但不是“之后”的名称列表,就像在集合中一样,它类似于 A intersection B-complement。


使用上面的 df 数据框,我将在我的新数据框中只获得一个名称 - Test1。


我正在为如何构建逻辑和使用什么功能而苦苦挣扎。我应该使用循环遍历所有值还是根据标志值分离数据帧并执行设置操作?


只是在寻找可行的解决方案


哆啦的时光机
浏览 135回答 2
2回答

慕沐林林

你只需要做两个过滤器;第一个过滤器检查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    flag0  test1  before3  test1  before

慕容3067478

这是一种使用 的方法.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          DATE0  Test1  1 April 20202  Test1   28 May 2020
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python