在Pandas中,如何根据只影响某些条目的条件筛选所有行以获得唯一ID



我正在处理这样的数据帧:

import pandas as pd
import datetime
records = [{'Name':'John', 'Start':'2020-01-01','Stop':'2020-03-31'}, {'Name':'John', 'Start':'2020-04-01','Stop':'2020-12-31'}, 
{'Name':'Mary', 'Start':'2020-01-01','Stop':'2020-03-15'}, {'Name':'Mary', 'Start':'2020-03-16','Stop':'2020-03-31'}, 
{'Name':'Mary', 'Start':'2020-04-01','Stop':'2020-12-31'}, {'Name':'Stan', 'Start':'2020-02-01','Stop':'2020-03-31'},
{'Name':'Stan', 'Start':'2020-04-01','Stop':'2020-12-31'}]
df = pd.DataFrame(records)
df['Start'] = pd.to_datetime(df['Start'])
df['Stop'] = pd.to_datetime(df['Stop'])
df

其给出输出

Name         Start       Stop
0   John    2020-01-01  2020-03-31
1   John    2020-04-01  2020-12-31
2   Mary    2020-01-01  2020-03-15
3   Mary    2020-03-16  2020-03-31
4   Mary    2020-04-01  2020-12-31
5   Stan    2020-02-01  2020-03-31
6   Stan    2020-04-01  2020-12-31

我想做的是为所有开始日期为2020-01-01的个人选择所有记录。也就是说,如果有人没有从1/1开始的记录,那么我不想要他们的任何记录。结果应该给我这个:

Name    Start   Stop
0   John    2020-01-01  2020-03-31
1   John    2020-04-01  2020-12-31
2   Mary    2020-01-01  2020-03-15
3   Mary    2020-03-16  2020-03-31
4   Mary    2020-04-01  2020-12-31

输出中不应该有斯坦的记录,因为他的参赛作品都不是从2020-01-01开始的。关于如何做到这一点,有什么想法吗?谢谢

尝试按转换分组的条件:

df[df['Start'].eq("2020-01-01").groupby(df["Name"]).transform('any')]

Name      Start       Stop
0  John 2020-01-01 2020-03-31
1  John 2020-04-01 2020-12-31
2  Mary 2020-01-01 2020-03-15
3  Mary 2020-03-16 2020-03-31
4  Mary 2020-04-01 2020-12-31

最新更新