pandas - 获取熊猫数据框中特定列的累积总和和平均值
问题描述
我有一个数据框:
# create example df
df = pd.DataFrame(index=[1,2,3,4,5,6])
df['ID'] = [1,1,1,2,2,2]
df['election_date'] = pd.date_range("01/01/2010", periods=6, freq="M")
df['stock_price'] = [1,2,3,4,5,6]
# sort values
df.sort_values(['election_date'], inplace=True, ascending=False)
df
ID election_date stock_price
6 2 2010-06-30 6
5 2 2010-05-31 5
4 2 2010-04-30 4
3 1 2010-03-31 3
2 1 2010-02-28 2
1 1 2010-01-31 1
我的目标是计算stock_price
每个列的累积总和和平均值ID
。我成功计算了累积总和:
df['stock_price_sum_past'] = (df.iloc[::-1]
.groupby('ID')['stock_price']
.apply(lambda x: x.shift().cumsum())
.fillna(0)
.astype(int))
ID election_date stock_price stock_price_sum_past
6 2 2010-06-30 6 9
5 2 2010-05-31 5 4
4 2 2010-04-30 4 0
3 1 2010-03-31 3 3
2 1 2010-02-28 2 1
1 1 2010-01-31 1 0
我没有成功计算列的累积平均值stock_price
。此外,我不明白如何获取该列的累积计数election_date
。我知道有cumcount 之类的东西,但我不明白如何将它应用于我的问题。
编辑:
我相信这是预期的意思:
ID election_date stock_price stock_price_sum_past stock_price_mean_past
6 2 2010-06-30 6 9 4.5
5 2 2010-05-31 5 4 4.0
4 2 2010-04-30 4 0 NaN
3 1 2010-03-31 3 3 1.5
2 1 2010-02-28 2 1 1.0
1 1 2010-01-31 1 0 NaN
我想你可以用 0 替换 NaN。取决于你的定义mean
解决方案
我们可以使用and创建sort
数据帧election_date
并创建一个顺序计数器,然后将其除以累积和 per以获得累积平均值groupby
cumcount
counter
ID
df = df.sort_values('election_date')
grp = df.groupby('ID')['stock_price']
df['cum_sum'] = grp.apply(lambda p: p.shift(fill_value=0).cumsum())
df['cum_mean'] = df['cum_sum'] / grp.cumcount()
ID election_date stock_price cum_sum cum_mean
1 1 2010-01-31 1 0 NaN
2 1 2010-02-28 2 1 1.0
3 1 2010-03-31 3 3 1.5
4 2 2010-04-30 4 0 NaN
5 2 2010-05-31 5 4 4.0
6 2 2010-06-30 6 9 4.5
PS:生成的数据帧按date
升序排序。
推荐阅读
- github - 更改拉取请求的基本分支并排除合并的提交
- .net - AppendBlockAsync - 如果不存在则创建 Blob
- angular - Angular:正确禁用表单控制,以便我以后可以读取值
- html - 如何更改 Bootstrap 下拉箭头中的位置?
- java - 试图将tomcat切换到undertow,没有“ServletContext set”错误
- powershell - 如何从windows powershell中的输出中获取元素
- javascript - 加密 SingleSPA customProps
- javascript - wordpress 重力形式如何动态检查复选框
- terraform - 连接 2 个 terraform 远程状态
- vb.net - 如何从vb.net中的datagridview逐步保存(插入)数据表中的数据