嗨,我有一个如下数据框:
ID date
1 01.01.2017
1 01.01.2017
1 01.04.2017
2 01.01.2017
2 01.01.2017
2 01.02.2017
我要过滤的ID的日期差的最大和最小值为3天。最终的数据帧应该像这样,因为只有id 1符合条件:
ID date
1 01.01.2017
1 01.01.2017
1 01.04.2017
谢谢。
答案 0 :(得分:0)
您可以创建一个遮罩,然后将其用作过滤器:
import pandas as pd
# create sample data-frame
data = [[1, '01.01.2017'], [1, '01.01.2017'], [1, '01.04.2017'],
[2, '01.01.2017'], [2, '01.01.2017'], [2, '01.02.2017']]
df = pd.DataFrame(data=data, columns=['id', 'date'])
df['date'] = pd.to_datetime(df.date)
# create mask
mask = df.groupby('id')['date'].transform(lambda x: (x.max() - x.min()).days == 3)
# filter
result = df[mask]
print(result)
输出
id date
0 1 2017-01-01
1 1 2017-01-01
2 1 2017-01-04
答案 1 :(得分:0)
您可以将Groupby.filter
与自定义的lambda
函数一起使用,以检查最大日期和最小日期之间的时差是否为3
天:
d = datetime.timedelta(days=3)
df.groupby('ID').date.filter(lambda x: (x.max() - x.min()) == d)
ID
1 2017-01-01
1 2017-01-01
1 2017-01-04
Name: date, dtype: datetime64[ns]