我正在处理这样的数据帧:
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