python - panda 数据框按 ID 和日期聚合
问题描述
我正在尝试按 ID 和日期聚合数据框。假设我有一个数据框:
Publish date ID Price
0 2000-01-02 0 10
1 2000-01-03 0 20
2 2000-02-17 0 30
3 2000-01-04 1 40
我想按 ID 和日期(频率 = 1W)聚合值并获得如下数据框:
Publish date ID Price
0 2000-01-02 0 30
1 2000-02-17 0 30
2 2000-01-04 1 40
我知道可以通过迭代 ID 并使用 grouper 聚合价格来实现。有没有更有效的方法而不迭代 ID?非常感谢。
解决方案
Grouper
与 aggregate 一起使用sum
,但不确定频率Grouper
(因为所有看起来都不同):
df['Publish date'] = pd.to_datetime(df['Publish date'])
df = (df.groupby([pd.Grouper(freq='W', key='Publish date'),'ID'], sort=False)['Price']
.sum()
.reset_index())
print (df)
Publish date ID Price
0 2000-01-02 0 10
1 2000-01-09 0 20
2 2000-02-20 0 30
3 2000-01-09 1 40
df['Publish date'] = pd.to_datetime(df['Publish date'])
df = (df.groupby([pd.Grouper(freq='W-Mon', key='Publish date'),'ID'], sort=False)['Price']
.sum()
.reset_index())
print (df)
Publish date ID Price
0 2000-01-03 0 30
1 2000-02-21 0 30
2 2000-01-10 1 40
或者:
df['Publish date'] = pd.to_datetime(df['Publish date'])
df = (df.groupby([pd.Grouper(freq='7D', key='Publish date'),'ID'], sort=False)['Price']
.sum()
.reset_index())
print (df)
Publish date ID Price
0 2000-01-02 0 30
1 2000-02-13 0 30
2 2000-01-02 1 40
推荐阅读
- node.js - 将 Node js 与对话框流集成的问题
- oracle - 试图在 UNIX 变量中存储 PL/SQL 块的值
- html - 为什么 AdBlock 会在 symfony 中阻止我的 Header?
- javascript - 我们如何从赛普拉斯的一个文件夹中读取多个文件?
- swiftui - 相对于另一个居中视图定位视图
- node.js - Node.js API 服务器 - 无法构建
- sql - 条件非空约束
- javascript - JS 构造函数正在输出未定义的值
- java - JavaFX:ObservableListWrapper 无法转换为 TableView 中的类
- jquery - MVC 中的 Jquery ajax POST 调用 - 包括 IIS 中托管的应用程序名称