gpt4 book ai didi

pandas - 数据框列的日期差异

转载 作者:行者123 更新时间:2023-12-04 10:21:20 25 4
gpt4 key购买 nike

我有以下数据框

+-----------------------------+
| app_id mail_dt |
+-----------------------------+
| 100255 12000017 2009-03-23 |
| 129628 12000017 2009-09-04 |
| 183069 12000017 2010-03-19 |
| 125231 12000031 2009-08-18 |
| 204245 12000031 2010-05-12 |
| 296410 12000031 2010-10-06 |
| 183030 12000044 2010-03-17 |
| 291704 12000044 2010-09-29 |
| 635932 12000044 2011-09-23 |
+-----------------------------+

我需要计算相同 app_id 的连续日期时间差异然后计算相应 mail_dt 的平均值区别

说 app_id = 12000017 它将是以下内容
df.loc[129628,'mail_dt'] - df.loc[100255,'mail_dt']
Out[25]: Timedelta('165 days 00:00:00')

df.loc[183069,'mail_dt'] - df.loc[129628,'mail_dt']
Out[26]: Timedelta('196 days 00:00:00')

平均值将为 180.5 天(让我们将其定为 180)

所以,我的问题是如何计算每个 app_id 的平均值并构建以下数据框
+----------+------------+
| app_id | mean_delta |
+----------+------------+
| 12000017 | 180 |
| 12000031 | 207 |
+----------+------------+

当然,可以遍历所有 app_id并计算平均 timedelta 值,但我想知道是否有基于 groupby 和其他函数的漂亮解决方案。提前致谢

最佳答案

想法是通过 GroupBy.agg 获得每组的差异与 Series.diff mean , 通过 Series.dt.days 将 timedeltas 转换为天数最后到 2 列 DataFrame Series.reset_index :

#if necessary
df['mail_dt'] = pd.to_datetime(df['mail_dt'])

df1 = (df.groupby('app_id')['mail_dt']
.agg(lambda x: x.diff().mean())
.dt.days
.reset_index(name='avg'))
print (df1)
app_id avg
0 12000017 180
1 12000031 207
2 12000044 277

关于pandas - 数据框列的日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60830941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com