gpt4 book ai didi

python - pandas DataFrame 在每组的基础上插值/重采样每日数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:15 27 4
gpt4 key购买 nike

我有一个看起来像这样的数据框:

userid      date          count
a 2016-12-01 4
a 2016-12-03 5
a 2016-12-05 1
b 2016-11-17 14
b 2016-11-18 15
b 2016-11-23 4

第一列是用户 ID,第二列是日期(来自 groupby(pd.TimeGrouper('d')),第三列是每日计数。但是,对于每个用户,我想以确保在每个用户的基础上将用户的最小日期和最大日期之间缺失的任何天数填充为 0。因此,如果我从上面的数据框开始,我最终会得到这样的数据框:

   userid      date          count
a 2016-12-01 4
a 2016-12-02 0
a 2016-12-03 5
a 2016-12-04 0
a 2016-12-05 1
b 2016-11-17 14
b 2016-11-18 15
b 2016-11-19 0
b 2016-11-20 0
b 2016-11-21 0
b 2016-11-22 0
b 2016-11-23 4

我知道 pandas 数据框有多种方法可以重新采样(可以选择向前插值、向后插值或平均插值),但是在上面的意义上我将如何做到这一点,我想要一个连续的时间每个用户 ID 的序列,但每个用户的时间序列日期不同?

以下是我尝试过但没有奏效的方法:

grouped_users = user_daily_counts.groupby('user').set_index('timestamp').resample('d', fill_method = None)

然而,这会引发错误AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“set_index”,请尝试使用“apply”方法。我不确定我如何能够使用 apply 方法,同时按照我的意愿提出所有列。

感谢您的任何建议!

最佳答案

您可以使用 groupbyresample , 但首先需要由 set_index 创建的 Datetimeindex .
( need pandas 0.18.1 and higher )

然后用asfreq0填充NaNfillna .

最后删除列 useridreset_index :

df = df.set_index('date')
.groupby('userid')
.resample('D')
.asfreq()
.fillna(0)
.drop('userid', axis=1)
.reset_index()

print (df)
userid date count
0 a 2016-12-01 4.0
1 a 2016-12-02 0.0
2 a 2016-12-03 5.0
3 a 2016-12-04 0.0
4 a 2016-12-05 1.0
5 b 2016-11-17 14.0
6 b 2016-11-18 15.0
7 b 2016-11-19 0.0
8 b 2016-11-20 0.0
9 b 2016-11-21 0.0
10 b 2016-11-22 0.0
11 b 2016-11-23 4.0

如果想要count 整数列的dtype 添加astype :

df = df.set_index('date') \
.groupby('userid') \
.resample('D') \
.asfreq() \
.fillna(0) \
.drop('userid', axis=1) \
.astype(int) \
.reset_index()

print (df)
userid date count
0 a 2016-12-01 4
1 a 2016-12-02 0
2 a 2016-12-03 5
3 a 2016-12-04 0
4 a 2016-12-05 1
5 b 2016-11-17 14
6 b 2016-11-18 15
7 b 2016-11-19 0
8 b 2016-11-20 0
9 b 2016-11-21 0
10 b 2016-11-22 0
11 b 2016-11-23 4

关于python - pandas DataFrame 在每组的基础上插值/重采样每日数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40998220/

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