在另一个帖子的刺激下,我的故事是:我有这个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。
你可以分两个阶段来做。
将所有具有相同col值的行进行分组。这可以使用 groupby()
.
获取新组中每行的索引。你可以用 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
你可以使用pandas的value_count函数, 得到任何数据点的频率.
这应该可以解决你的问题:-
假设你的数据框架名称是 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