python - 用于计算日期差异的 Pandas 数据框分组函数
问题描述
我有一个这样的数据框:
id_a | date
12 | 2020-01-01
12 | 2020-01-02
13 | 2020-01-01
13 | 2020-01-03
14 | 2020-01-01
14 | 2020-01-02
14 | 2020-01-06
我希望能够根据 id_a 在每个组的最大日期和最小日期之间进行差异得到类似
id_a | date | diff
12 | 2020-01-01 | 1
12 | 2020-01-02 | 1
13 | 2020-01-01 | 2
13 | 2020-01-03 | 2
14 | 2020-01-01 | 5
14 | 2020-01-02 | 5
14 | 2020-01-06 | 5
我正在尝试这样做:
df['diff'] = df.groupby('id_a').apply(lambda x: max(x['date']) - min(x['date']))
但我有点挣扎
我在正确的道路上吗?
解决方案
你想要transform
而不是apply
. 也np.ptp
会这样做:
# convert to datetime, ignore if already is
df['date'] = pd.to_datetime(df['date'])
df['date_diff'] = df.groupby('id_a')['date'].transform(np.ptp)
输出:
id_a date date_diff
0 12 2020-01-01 1 days
1 12 2020-01-02 1 days
2 13 2020-01-01 2 days
3 13 2020-01-03 2 days
4 14 2020-01-01 5 days
5 14 2020-01-02 5 days
6 14 2020-01-06 5 days
更新:如果你想max
从date_a
和min
从date_b
:
groups = df.groupby('id_a')
min_dates = groups['date_b'].transform('min')
max_dates = groups['date_a'].transform('max')
df['date_diff'] = max_dates - min_dates
推荐阅读
- javascript - 如何在 Vue.js 中将带有一些数组对象值的 Post 请求发送到我的后端
- mysql - 如何在 SQL 中将 2 列合并为 1 列 TO 输出
- python - pandas - 如何在行中搜索整个单词
- python - 登录时重新加载计数对象
- db2 - 如何使 V_SQL 与包含 where 子句的字符串值连接。而不是表别名?在 DB2 中
- ionic-framework - 对 ionic 中的 FCM 和 Push 插件感到困惑
- c++ - 如何将类方法设置为参数并将它们与 Visual Studio 2017 上的 lambdas 一起使用?
- prisma - 为什么 prisma 在创建新记录时会出现内部错误?
- postgresql - PostgreSQL 中缺少一些 .dll 文件
- javascript - 语法错误 node_modules / esnext 中的意外令牌导出和 commonjs 不兼容