我在Pandas中有一个DF,看起来像:
Letters Numbers
A 1
A 3
A 2
A 1
B 1
B 2
B 3
C 2
C 2
我想要计算相似行的数量并将结果保存在第三列中。例如,输出I' m寻找:
Letters Numbers Events
A 1 2
A 2 1
A 3 1
B 1 1
B 2 1
B 3 1
C 2 2
我期待的一个例子是here。我提出的最好的想法是使用count_values()
,但我认为这仅适用于一列。另一个想法是使用duplicated()
,无论如何我不想构建任何for
- 循环。我很确定,存在for循环的Pythonic替代方案。
答案 0 :(得分:18)
您可以对这两列进行分组,然后计算组的大小:
In [16]: df.groupby(['Letters', 'Numbers']).size()
Out[16]:
Letters Numbers
A 1 2
2 1
3 1
B 1 1
2 1
3 1
C 2 2
dtype: int64
要获取示例输出中的DataFrame,可以使用reset_index
重置索引。
答案 1 :(得分:6)
您可以结合groupby
,transform
然后使用drop_duplicates
In [84]:
df['Events'] = df.groupby('Letters')['Numbers'].transform(pd.Series.value_counts)
df.drop_duplicates()
Out[84]:
Letters Numbers Events
0 A 1 2
1 A 3 1
2 A 2 1
4 B 1 1
5 B 2 1
6 B 3 1
7 C 2 2