我有一个这样的数据框:
1 | 2 |
---|---|
A | B |
B | A |
C | D |
C | D |
D | C |
我希望能够计算这样的组合实例的数量:
字母 | 计数 |
---|---|
AB | 2 |
光盘 | 3 |
所以本质上,为了计算出现次数,我希望能够将 CD 和 DC 计算为同一个实例。
我试过了
df.groupby(['1','2']).size().reset_index().rename(columns={0:'count'})
但这并不像 BA 那样计算 AB,而是分别计算它们的出现次数。如果有人对如何做到这一点有任何建议,我们将不胜感激。
答案 0 :(得分:1)
由于您没有将计数返回到原始 df,因此您可以先进行排序。
df.values.sort()
df['letters'] = df['1'].astype(str) + df['2'].astype(str)
df.groupby('letters').size().reset_index(name='count')
输出
letters count
0 AB 2
1 CD 3
答案 1 :(得分:1)
另一种类似于 Chris 的方法是使用 stack
和 groupby
。
s = df.stack().sort_values().groupby(level=0).agg(''.join).to_frame('Letters')
s.groupby('Letters',as_index=False).agg(Count=('Letters','size'))
Letters Count
0 AB 2
1 CD 3