Python 3.x 如何使用熊猫进行分组时间线填充?
首先,我看过所有的教程和帖子。它们要么基于较旧的Pandas API,要么都以总和/平均数/中值类型的示例作为结论。所以请听我说完 我试图使用Pandas从Postgres中的原始统计表中提取汇总表信息,按3个ID分组,每小时重新采样一次,0作为消耗的字节列。基本上,我想要一个每小时的时间轴,其中每个设备id的消耗字节相加,但没有记录/消耗字节的小时数为0。我希望有人能指出我的逻辑缺陷 以下是我的初始数据帧:Python 3.x 如何使用熊猫进行分组时间线填充?,python-3.x,pandas,Python 3.x,Pandas,首先,我看过所有的教程和帖子。它们要么基于较旧的Pandas API,要么都以总和/平均数/中值类型的示例作为结论。所以请听我说完 我试图使用Pandas从Postgres中的原始统计表中提取汇总表信息,按3个ID分组,每小时重新采样一次,0作为消耗的字节列。基本上,我想要一个每小时的时间轴,其中每个设备id的消耗字节相加,但没有记录/消耗字节的小时数为0。我希望有人能指出我的逻辑缺陷 以下是我的初始数据帧: df = pd.read_sql_query("SELECT date, o
df = pd.read_sql_query("SELECT date, organization_id, device_id, consumed_bytes FROM %s;" % STAT_TABLE, con)
print(df)
date organization_id device_id consumed_bytes
0 2021-04-02 03:06:21.544000+00:00 1 1 74000
1 2021-04-02 03:06:21.544000+00:00 1 1 143000
2 2021-04-02 03:06:21.544000+00:00 1 1 23000
3 2021-04-02 03:06:21.544000+00:00 1 1 102000
4 2021-04-02 03:06:21.544000+00:00 1 1 66000
... ... ... ... ...
14385 2021-04-06 02:46:21.544000+00:00 1 2 19000
14386 2021-04-06 02:50:21.544000+00:00 1 2 38000
14387 2021-04-06 02:54:21.544000+00:00 1 2 140000
14388 2021-04-06 02:58:21.544000+00:00 1 2 78000
14389 2021-04-06 03:02:21.544000+00:00 1 2 89000
[14390 rows x 4 columns]
下面是一个按日期、组织、设备分组的工作尝试,使用消耗的_字节进行汇总:
test1=df.groupby(by=["date", "organization_id", "device_id"]).sum('consumed_bytes')
print(test1)
consumed_bytes
date organization_id device_id
2021-04-02 03:06:21.544000+00:00 1 1 114439000
2 116346000
2021-04-02 03:07:21.544000+00:00 1 1 63000
2 100000
2021-04-02 03:08:21.544000+00:00 1 1 140000
... ...
2021-04-06 02:54:21.544000+00:00 1 2 140000
2021-04-06 02:58:21.544000+00:00 1 1 28000
2 78000
2021-04-06 03:02:21.544000+00:00 1 1 5000
2 89000
[6960 rows x 1 columns]
除了“id”求和之外(我想在我的select中过滤掉),它看起来还可以
这就是我遇到麻烦的地方
我需要每小时对数据帧进行重采样(),并用0个已消耗的字节填充缺失的小时数。我开始尝试重新采样('1H',on='date'):
这可能是因为在重新采样之前,我需要对DataFrameGroupBy对象执行一些操作。因此,我尝试在重新采样之前重置索引,它能够再次找到日期列:
df.groupby(by=["date", "organization_id", "device_id"]).sum('consumed_bytes').reset_index().resample('1H', on='date')
<pandas.core.resample.DatetimeIndexResampler object at 0x7fe0c118c3a0>
听着,我可以尝试列举所有我切片重采样的方法,但没有产生任何结果。我尝试过倒序(重新采样,然后尝试groupby),但运气不好
我尝试一下Pandas,因为我希望能够从这个数据集创建不同的摘要表(设备id、组织id、不同的时间线;按天、按分钟等),但是重采样返回的对象类型不能像数据帧(旧API)那样使用
有人能提供一个提示吗?如果这里没有足够的细节,我道歉。谢谢
df.groupby(by=["date", "organization_id", "device_id"]).sum('consumed_bytes').reset_index().resample('1H', on='date')
<pandas.core.resample.DatetimeIndexResampler object at 0x7fe0c118c3a0>
df.groupby(by=["date", "organization_id", "device_id"]).resample('1H', on='date').fillna(0)
*** KeyError: 'The grouper name date is not found'