python - 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
谢谢你。
解决方案
您可以创建一个蒙版,然后将其用作过滤器:
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
推荐阅读
- jquery - 如何在单击图像链接时显示工具提示
- regex - .htaccess 文件中的操作顺序
- javascript - 如何使用javascript获取输入字段中的值以在sharepoint中编辑
- graphql - “'VoteCreateInput'类型的变量'$data'预期值”
- c# - 从 Siebel CRM 下载文件
- azure - 用于按用户将文档上传到 Azure 并保持私有的选项
- css - 带有纯 CSS 的 4 列页脚
- jquery - 根据视图模型中的值自动选择下拉菜单
- python - 为什么 python 不自动从 requirements.txt 安装?
- mongodb - 如何从 laravel 中的 mongodb 获取值?