列中特定值的熊猫滚动计数频率

时间:2021-06-17 10:43:40

标签: python pandas dataframe count rolling-computation

我想要一个滚动计数列来跟踪列中特定值的计数。我想滚动计算这匹马获得第一名的次数。

这是我所拥有的一个例子

<头>
位置
1
3
1
b 3
b 1
b 3
c 5
c 2
c 1

这就是我想要的

<头>
位置 计数
1 1
3 1
1 2
b 3 0
b 1 1
b 3 1
c 5 0
c 2 0
c 1 1

2 个答案:

答案 0 :(得分:1)

您可以按“马”分组,然后在每个组中的第一个位置.cumsum

df["Count"] = df.groupby("Horse")["Position"].apply(lambda x: x.eq(1).cumsum())
print(df)

打印:

  Horse  Position  Count
0     a         1      1
1     a         3      1
2     a         1      2
3     b         3      0
4     b         1      1
5     b         3      1
6     c         5      0
7     c         2      0
8     c         1      1

答案 1 :(得分:1)

首先比较1,然后使用GroupBy.cumsum避免apply以提高性能:

df["Count"] = df["Position"].eq(1).groupby(df["Horse"]).cumsum()

或创建辅助列:

df["Count"] = df.assign(new = df["Position"].eq(1)).groupby("Horse")['new'].cumsum()

print (df)
  Horse  Position  Count
0     a         1      1
1     a         3      1
2     a         1      2
3     b         3      0
4     b         1      1
5     b         3      1
6     c         5      0
7     c         2      0
8     c         1      1

编辑:

g = df.assign(new = df["Position"].eq(1)).groupby("Horse")['new']
df["Count"] = g.cumsum()
df['perc'] = g.transform('mean').mul(100)
print (df)
  Horse  Position  Count       perc
0     a         1      1  66.666667
1     a         3      1  66.666667
2     a         1      2  66.666667
3     b         3      0  33.333333
4     b         1      1  33.333333
5     b         3      1  33.333333
6     c         5      0  33.333333
7     c         2      0  33.333333
8     c         1      1  33.333333
相关问题