添加一个充满滚动计数、总和或平均数的系列[重复]。

问题描述 投票:0回答:2

在另一个帖子的刺激下,我的故事是:我有这个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。

python pandas countif rolling-computation
2个回答
0
投票

你可以分两个阶段来做。

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

  2. 获取新组中每行的索引。你可以用 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

0
投票

你可以使用pandas的value_count函数, 得到任何数据点的频率.


0
投票

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

假设你的数据框架名称是 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
© www.soinside.com 2019 - 2024. All rights reserved.