添加一个包含滚动计数、总和或平均值的系列

Adding a series filled with Rolling count, sum or mean

受到另一个 post 的刺激,我的故事是: 我有这个 df

   col
0  B
1  B
2  A
3  A
4  A
5  B

我需要这个输出

   col col_frequencies
0  B   1
1  B   2
2  A   1 
3  A   2
4  A   3
5  B   3

#第5行的值是第2行的更新值。我不想重置频率计数器

类似于 excel 中的 countif。

在此先感谢初学者, G.

您可以使用pandas的value_count函数来获取任意数据点的频率。

您可以分两个阶段执行此操作:

  1. 将具有相同 col 值的所有行分组。这可以使用 groupby().

  2. 来完成
  3. 获取新组中每一行的索引。您可以使用 cumcount()(从零开始,因此您要为其添加 +1)

一应俱全:

df['col_frequencies'] = df.groupby(['col']).cumcount()+1;

例如(抱歉列名中的懒惰)

import pandas as pd

df = pd.DataFrame(['B', 'B', 'A', 'A', 'A', 'B'])
print(df)
df['Col'] = df.groupby([0]).cumcount()+1;

输出:

    0   Cola
0   B   1
1   B   2
2   A   1
3   A   2
4   A   3
5   B   3

这应该可以解决您的问题:-

假设您的数据框名称是 df

res = {}
r = []
for i, row in df.iterrows():
    if row['col'] in res:
        res[row['col']] += 1
        r.append(res[row['col']])
    else:
        res[row['col']] = 1
        r.append(res[row['col']])

df['col_frequencies'] = r

输出将是:-

   col col_frequencies
0  B   1
1  B   2
2  A   1 
3  A   2
4  A   3
5  B   3