繁体   English   中英

Python数据框:根据分组条件过滤数据框

[英]Python Dataframes: Filter a dataframe according to groupby condition

嗨,我有一个如下数据框:

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       

我想要的是过滤与日期差异的相关最小和最大为3天的id。 最终的数据帧应该像这样,因为只有id 1符合条件:

ID    date          
1     01.01.2017        
1     01.01.2017        
1     01.04.2017 

谢谢。

您可以创建一个遮罩,然后将其用作过滤器:

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

您可以将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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM