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
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
添加回答
举报