python - Pandas:结合重采样和分组。在将它们汇总到时间箱中之前,如何平均同一组中的值?
问题描述
我有与时间戳和定制组相关联的表格数据(由 col1、col2、...描述)。例子:
Group Col1 Col2 Col3
Time
2020-05-18 A 10 20 30
2020-05-18 B 10 20 30
2020-05-18 C 10 20 30
2020-05-19 A 10 20 30
2020-05-19 B 10 20 30
2020-05-19 C 10 20 30
2020-05-20 A 10 20 30
2020-05-20 B 10 20 30
2020-05-20 C 10 20 30
2020-05-21 A 10 20 30
2020-05-21 B 10 20 30
2020-05-21 C 10 20 30
该数据帧可以通过以下方式生成:
dataframe = pd.DataFrame({"Time": ["2020-05-18", "2020-05-18", "2020-05-18", "2020-05-19", "2020-05-19", "2020-05-19", "2020-05-20", "2020-05-20", "2020-05-20", "2020-05-21", "2020-05-21", "2020-05-21"], "Group": ["A","B","C","A","B","C","A","B","C","A","B","C"], "Col1": 12*[10], "Col2": 12*[20], "Col3": 12*[30]})
dataframe["Time"] = pd.to_datetime(dataframe["Time"])
dataframe = dataframe.set_index("Time")
我想创建时间箱(如使用重采样函数),同一组内的平均值,然后在同一时间箱内将它们相加。但是,如果我写dataframe.resample("2D").sum()
,值将直接汇总所有组,而无需首先在同一组中进行平均。像这样:
Col1 Col2 Col3
Time
2020-05-18 60 120 180
2020-05-20 60 120 180
但我需要的是在汇总之前对属于同一组的值进行平均。在这种情况下,所需的输出将是:
Col1 Col2 Col3
Time
2020-05-18 30 60 90
2020-05-20 30 60 90
我尝试在重新采样后应用 groupby(例如dataframe.resample("2D").grouby("Group")
),但它引发了 TypeError(“'TimeGrouper' 对象不可调用”)
有什么方法可以解决这个问题?提前致谢。
编辑:
输出dataframe.groupby(["Time","Group"]).mean()
:
Col1 Col2 Col3
Time Group
2020-05-18 A 10 20 30
B 10 20 30
C 10 20 30
2020-05-19 A 10 20 30
B 10 20 30
C 10 20 30
2020-05-20 A 10 20 30
B 10 20 30
C 10 20 30
2020-05-21 A 10 20 30
B 10 20 30
C 10 20 30
解决方案
Grouper
与聚合一起使用mean
:
print (dataframe.groupby(['Group',pd.Grouper(freq='2D', key='Time')]).mean())
Col1 Col2 Col3
Group Time
A 2020-05-18 10 20 30
2020-05-20 10 20 30
B 2020-05-18 10 20 30
2020-05-20 10 20 30
C 2020-05-18 10 20 30
2020-05-20 10 20 30
然后sum
到第二级Time
:
df = (
dataframe
.groupby(['Group', pd.Grouper(freq='2D', key='Time')])
.mean()
.sum(level=1)
)
print (df)
Col1 Col2 Col3
Time
2020-05-18 30 60 90
2020-05-20 30 60 90
推荐阅读
- javascript - Javascript 中的三元返回
- parsing - 解析器更喜欢强制转换而不是乘法
- express - Express 网关设置自定义策略路径通配符
- ms-access - 表格数据未正确报告
- php - Laravel 通知 - 尝试从控制器传递数据
- firebase - 输入'未来
' 不是类型 'List 的子类型 ' 在类型转换中 - django - Django:无法在 CheckboxSelectMultiple 小部件中设置自定义 ID
- flutter - 如何绘制标记?像谷歌地图中使用画布的标记
- c - 为什么说可变大小的输出可能没有被初始化?
- javascript - Javascript 希望有一个标签,您可以检查该标签是否自动刷新页面