首页 > 解决方案 > Python Dataframes:根据 groupby 条件过滤数据框

问题描述

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

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 

谢谢你。

标签: pythondataframe

解决方案


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

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

推荐阅读