python - pandas df 中两列之间的累积计数

标签 python pandas count

我正在尝试返回中值发生更改的累积计数次数。

因此,对于下面的 df,我想返回 'Home' 更改为 'Away' 的运行次数,并且反之亦然。我不想返回某个值的显示次数。

import pandas as pd

d = ({
    'Who' : ['Home','Away','','','Home','Away','Home','Home','Home','','Away','Home'],
    })

df = pd.DataFrame(data = d)

我试过这个。

df['Home_count'] = (df['Who'] == 'Home').cumsum()
df['Away_count'] = (df['Who'] == 'Away').cumsum()

返回结果:

     Who  Home_count  Away_count
0   Home           1           0
1   Away           1           1
2                  1           1
3                  1           1
4   Home           2           1
5   Away           2           2
6   Home           3           2
7   Home           4           2
8   Home           5           2
9                  5           2
10  Away           5           3
11  Home           6           3

但我正在尝试计算它改变的次数。不是每个值的总数。因此,如果显示为“Home、Home、Home、Away”,则“Away”旁边应该只有一个计数。不是1、2、3对阵主场。

Home 1 #Theres a change so provide a count
Home   #No change so no count
Home   #No change so no count
Away 1 #Theres a change so provide a count
Home 2 #Theres a change so provide a count

请参阅预期输出:

预期输出:

   Count_Away Count_Home   Who
0                      1  Home
1           1             Away
2                             
3                             
4                      2  Home
5           2             Away
6                      3  Home
7                         Home
8                         Home
9                             
10          3             Away
11                     4  Home

最佳答案

  1. 使用 pd.get_dummies 获取 one-hot 编码的 DataFrame
  2. 使用cumsum计算累积和
  3. 通过将 v 与其移动后的版本进行比较来查找变化点
  4. 用空字符串填充 NaN
  5. 将结果与原始结果连接

v = pd.get_dummies(
      df.where(df.Who.ne(df.Who.shift()) & df.Who.str.len().astype(bool)
   ), prefix='Count'
).cumsum()

df = pd.concat([
     v.where(v.ne(v.shift())).fillna('', downcast='infer'), df
  ], axis=1
)

print(df)
   Count_Away Count_Home   Who
0           0          1  Home
1           1             Away
2                             
3                             
4                      2  Home
5           2             Away
6                      3  Home
7                         Home
8                         Home
9                             
10          3             Away
11                     4  Home

关于python - pandas df 中两列之间的累积计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51034031/

相关文章:

python - Scipy Curve_fit。多个参数的单独界限

python-3.x - 根据优先级修改数据框

python - 使用 Pandas 读取带有额外逗号且没有 quotechar 的 CSV?

SQL 总和

matrix - 在Mathematica中将坐标系转换为矩阵

python - 我如何获得图像识别的概率

python - HTTP POST Azure 中的授权 header [错误代码 401]

python - Python 脚本和 Python IDLE 中的不同行为?

python - 在 python 中的同一工作簿中创建 Excel 工作表

Angular 2 *ngFor 项目在循环外计数