gpt4 book ai didi

python - pandas groupby 中连续日期之间的差异

转载 作者:行者123 更新时间:2023-12-02 20:10:01 28 4
gpt4 key购买 nike

我有一个数据框如下:

df_raw_dates = pd.DataFrame({"id": [102, 102, 102, 103, 103, 103, 104], "val": [9,2,4,7,6,3,2], "dates": [pd.Timestamp(2002, 1, 1), pd.Timestamp(2002, 3, 3), pd.Timestamp(2003, 4, 4), pd.Timestamp(2003, 8, 9), pd.Timestamp(2005, 2, 3), pd.Timestamp(2005, 2, 8), pd.Timestamp(2005, 2, 3)]})

id val dates
0 102 9 2002-01-01
1 102 2 2002-03-03
2 102 4 2003-04-04
3 103 7 2003-08-09
4 103 6 2005-02-03
5 103 3 2005-02-08
6 104 2 2005-02-03

我想要实现的是而不是 dates列有一个列diff_dates这将表示每个 id 的连续日期之间的差异,其中每个 id 的第一个条目在 diff_dates列将为 0 。话虽如此,生成的数据框应该是:

df_processed_dates = pd.DataFrame({"id": [102, 102, 102, 103, 103, 103, 104], "val": [9,2,4,7,6,3,2], "diff_dates": [0, 61, 397, 0, 544, 5, 0]})

id val diff_dates
0 102 9 0
1 102 2 61
2 102 4 397
3 103 7 0
4 103 6 544
5 103 3 5
6 104 2 0

期待您的答复!

最佳答案

使用groupby + diff 。然后,您可以提取天数部分并使用 fillna 填充缺失的条目。 .

df_raw_dates.groupby('id').dates.diff().dt.days.fillna(0, downcast='infer')

0 0
1 61
2 397
3 0
4 544
5 5
6 0
Name: dates, dtype: int64

要将其重新分配为新列,请执行

df_raw_dates['date_diff'] = (
df_raw_dates
.pop('dates')
.groupby(df_raw_dates['id'])
.diff()
.dt.days
.fillna(0, downcast='infer'))


df_raw_dates

id val date_diff
0 102 9 0
1 102 2 61
2 102 4 397
3 103 7 0
4 103 6 544
5 103 3 5
6 104 2 0

关于python - pandas groupby 中连续日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814805/

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