gpt4 book ai didi

python - 在Python中使用groupby计算平均差异

转载 作者:行者123 更新时间:2023-12-01 09:16:20 26 4
gpt4 key购买 nike

我是 Python 新手,我想在第一列中聚合(分组)ID。第二列中的值是时间戳(日期时间格式),通过聚合 ID,我希望获得聚合 ID 列中每个 ID 的时间戳(以天为单位)之间的平均差异。我的表格看起来像 df1,我想要类似 df2 的东西,但由于我是一个绝对的初学者,所以我不知道如何做到这一点。

import pandas as pd
import numpy as np
from datetime import datetime

In[1]:
# df1
ID = np.array([1,1,1,2,2,3])
Timestamp = np.array([
datetime.strptime('2018-01-01 18:07:02', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2018-01-08 18:07:02', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2018-03-15 18:07:02', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2018-01-01 18:07:02', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2018-02-01 18:07:02', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2018-01-01 18:07:02', "%Y-%m-%d %H:%M:%S")])
df = pd.DataFrame({'ID': ID, 'Timestamp': Timestamp})

Out[1]:
ID Timestamp
0 1 2018-01-01 18:07:02
1 1 2018-01-08 18:07:02
2 1 2018-03-15 18:07:02
3 2 2018-01-01 18:07:02
4 2 2018-02-01 18:07:02
5 3 2018-01-01 18:07:02

In[2]:
#df2
ID = np.array([1,2,3])
Avg_Difference = np.array([7, 1, "nan"])
df2 = pd.DataFrame({'ID': ID, 'Avg_Difference': Avg_Difference})

Out[2]:
ID Avg_Difference
0 1 7
1 2 1
2 3 nan

最佳答案

你可以这样做:

df.groupby('ID')['Timestamp'].apply(lambda x: x.diff().mean())

就您而言,它看起来像:

>>> df
ID Timestamp
0 1 2018-01-01 18:07:02
1 1 2018-01-08 18:07:02
2 1 2018-03-15 18:07:02
3 2 2018-01-01 18:07:02
4 2 2018-02-01 18:07:02
5 3 2018-01-01 18:07:02

>>> df.groupby('ID')['Timestamp'].apply(lambda x: x.diff().mean())
ID
1 36 days 12:00:00
2 31 days 00:00:00
3 NaT
Name: Timestamp, dtype: timedelta64[ns]

如果您希望将其作为包含名为 Avg_Difference 的列的数据框,只需在末尾添加 to_frame 即可:

df.groupby('ID')['Timestamp'].apply(lambda x: x.diff().mean()).to_frame('Avg_Difference')

Avg_Difference
ID
1 36 days 12:00:00
2 31 days 00:00:00
3 NaT

编辑根据您的评论,如果您想删除时间元素,只获取天数,您可以执行以下操作:

df.groupby('ID')['Timestamp'].apply(lambda x: x.diff().mean()).dt.days.to_frame('Avg_Difference')

Avg_Difference
ID
1 36.0
2 31.0
3 NaN

关于python - 在Python中使用groupby计算平均差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224774/

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