pandas - 以功能为键的熊猫 groupby
问题描述
我想以 3 年的时间跨度计算平均值。我的数据是这样的:
import pandas as pd
import numpy as np
N=120
data = {'p1': np.random.randint(50,100,N),
'p2': np.random.randint(0,100,N),
'p3': np.random.randint(10,70,N)
}
df = (pd.DataFrame(data, index=pd.bdate_range(start='20100101', periods=N, freq='BM'))
.stack()
.reset_index()
.rename(columns={'level_0': 'date', 'level_1': 'type', 0: 'price'})
.sort_values('date')
)
我试过了 :
(df.sort_values('date')
.groupby(['type',
''.join([(df.date.dt.year-3), '-', (df.date.dt.year)]) #3 years time span
]
)
['price']
.apply(lambda x: x.mean())
)
但收到一条错误消息:
TypeError: sequence item 0: expected str instance, Series found
我想按 2010-2013、2011-2014、2012-2015 的类型/时间段计算价格的平均值(和其他统计数据)...
标签很重要,因为我可以使用:
(df.sort_values('date')
.groupby(['type', df.date.dt.year//3]) #3 years time span
['price']
.apply(lambda x: x.mean())
)
任何想法 ?
解决方案
我想我找到了我自己的问题的答案(其他人可能感兴趣):
(df.sort_values('date')
.groupby(['type', (df.date.dt.year-3).astype(str).str.cat((df.date.dt.year).astype(str), sep='-')
]
)
['price']
.apply(lambda x: x.mean())
)
推荐阅读
- swift - SwiftUI 自定义视图永远重复动画显示为意外
- rust - 使用 extern 命令时找不到 crate
- firebase - 无法为 firebase 中的 bigquery 链接启用 google 分析
- android - 使用 FCM 发送通知时如何使用图像 URL?
- c# - 网站安全 - 1 个主站点,1 个在主站点内托管的辅助站点
- javascript - 在这段代码中,resolve 和 reject 做什么?
- android - Unity ARFoundation App Crash - 空指针取消引用问题
- axon - Axon 自动创建的表格有什么用?
- ruby - 加载 AWS S3 存储桶时出现“提取名称”错误
- wordpress - 基于用户的运输