gpt4 book ai didi

python - 使用 pandas 将不平衡面板聚合到时间序列

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

我有一个不平衡的面板,我正在尝试将其汇总为定期的每周时间序列。该面板如下所示:

Group     Date        value
A 1/1/2000 5
A 1/17/2000 10
B 1/9/2000 3
B 1/23/2000 7
C 1/22/2000 20

为了更好地了解我正在寻找的内容,我添加了一个中间步骤,如果可能的话我希望跳过该步骤。基本上需要填写一些数据才能聚合。正如您所看到的,观察之间缺失的几周是经过插值的。所有其他值均设置为零。

Group    Date        value
A 1/1/2000 5
A 1/8/2000 5
A 1/15/2000 10
A 1/22/2000 0
B 1/1/2000 0
B 1/8/2000 3
B 1/15/2000 3
B 1/22/2000 7
C 1/1/2000 0
C 1/8/2000 0
C 1/15/2000 0
C 1/22/2000 20

我正在寻找的最终结果如下:

 Date      value           
1/1/2000 5 = 5 + 0 + 0
1/8/2000 8 = 5 + 3 + 0
1/15/2000 13 = 10 + 3 + 0
1/22/2000 27 = 0 + 7 + 20

我还没有走得太远,成功创建了一个面板:

panel = df.set_index(['Group','week']).to_panel()

不幸的是,如果我尝试重新采样,则会收到错误

panel.resample('W')
TypeError: Only valid with DatetimeIndex or PeriodIndex

最佳答案

假设 df 是您的第二个数据帧,有几周,您可以尝试以下操作:

df.groupby('week').sum()['value']

groupby()及其应用的文档是 here 。它类似于 SQL 中的 group-by 函数。

<小时/>

要从第一个数据帧获取第二个数据帧,请尝试以下操作:

首先,准备一个函数来映射日到周

def d2w_map(day):
if day <=7:
return 1
elif day <= 14:
return 2
elif day <= 21:
return 3
else:
return 4

在上面的方法中,第 4 周考虑的是第 29 到 31 天。但是您明白了。您可以根据需要进行修改。

其次,从第一个数据框中取出列表,并将天转换为周

df['Week'] = df['Day'].apply(d2w_map)
del df['Day']

第三,仅使用“组”和“周”列初始化第二个数据框,并保留“值”。假设现在您初始化的新数据帧是结果,您现在可以进行连接

result = result.join(df, on=['Group', 'Week'])

最后,编写一个函数,用附近的元素填充“value”列中的 NanNan 是您需要插值的内容。由于我不确定您希望插值如何工作,因此我将其留给您。

<小时/>

以下是如何更改 d2w_map 将日期字符串转换为周整数

from datetime import datetime
def d2w_map(day_str):
return datetime.strptime(day_str, '%m/%d/%Y').weekday()

返回值0表示星期一,1表示星期二,依此类推。

如果您安装了dateutil包,该功能会更加强大:

from dateutil.parser import parse
def d2w_map(day_str):
return parse(day_str).weekday()

有时候,你想要的东西已经通过魔法实现了:)

关于python - 使用 pandas 将不平衡面板聚合到时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047818/

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