添加一个包含滚动计数、总和或平均值的系列
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函数来获取任意数据点的频率。
您可以分两个阶段执行此操作:
将具有相同 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
这应该可以解决您的问题:-
假设您的数据框名称是 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
受到另一个 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函数来获取任意数据点的频率。
您可以分两个阶段执行此操作:
将具有相同 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
这应该可以解决您的问题:-
假设您的数据框名称是 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