gpt4 book ai didi

python - 返回 pandas df 中值的运行计数

转载 作者:行者123 更新时间:2023-12-01 09:18:29 26 4
gpt4 key购买 nike

我正在尝试返回正在运行的 count基于 pandas 中的两列df

对于df下面我试图根据 Column 'Event' 确定计数& Column 'Who' .

import pandas as pd
import numpy as np

d = ({
'Event' : ['A','B','E','','C','B','B','B','B','E','C','D'],
'Space' : ['X1','X1','X2','','X3','X3','X3','X4','X3','X2','X2','X1'],
'Who' : ['Home','Home','Even','Out','Home','Away','Home','Away','Home','Even','Away','Home']
})

d = pd.DataFrame(data = d)

我已经尝试过以下方法。

df = d.groupby(['Event', 'Who'])['Space'].count().reset_index(name="count")

这会产生这个:

  Event   Who  count
0 Out 1
1 A Home 1
2 B Away 2
3 B Home 3
4 C Away 1
5 C Home 1
6 D Home 1
7 E Even 2

但我希望它是一个运行计数而不是总数。

可以df = d.groupby(['Event', 'Who'['Space'].count().reset_index(name="count")进行修改以过滤其他约束,或者必须是 mask功能或类似?

所以我的预期输出是:

   A_Away A_Home B_Away B_Home C_Away C_Home D_Away D_Home Event Space Who                       
0 1 A X1 Home
1 B X1 Home
2 E X2 Even
3 Out
4 1 C X3 Home
5 1 B X3 Away
6 1 B X3 Home
7 B X4 Away
8 2 B X3 Home
9 2 E X2 Even
10 1 C X2 Away
11 1 D X1 Home

因此计数被添加到该行中。不是整个数据集的总数。

最佳答案

以下是获得结果所需的步骤:

  1. 准备“Who”和“Event”作为索引
  2. 使用 groupbycumcount 获取组的累积计数
  3. 使用 unstack 将 DataFrame reshape /透视/取消堆叠为表格格式
  4. 修复列标题
  5. 使用 pd.concat 连接此结果与原始结果

# set the index
v = df.set_index(['Who', 'Event'], append=True)['Space']
# assign `v` the values for the cumulative count
v[:] = df.groupby(['Event', 'Who']).cumcount().add(1)
# reshape `v`
v = v.unstack([1, 2], fill_value='')
# fix your headers
v.columns = v.columns.map('{0[1]}_{0[0]}'.format)
# concatenate the result
pd.concat([v.loc[:, ~v.columns.str.contains('Out')], df], 1)

A_Home B_Home E_Even C_Home B_Away C_Away D_Home Event Space Who
0 1 A X1 Home
1 1 B X1 Home
2 1 E X2 Even
3 Out
4 1 C X3 Home
5 1 B X3 Away
6 2 B X3 Home
7 2 B X4 Away
8 3 B X3 Home
9 2 E X2 Even
10 1 C X2 Away
11 1 D X1 Home

关于python - 返回 pandas df 中值的运行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com