如何解决我怎样才能找到 DataFrame 中重复组合的频率 我的目标:通过以下步骤在数据框中找到最多重复的单词组合
df = pd.DataFrame({'CL1':['A B C','C A N']},columns=['CL1','CL2','CL3','CL4'])
CL1 CL2 CL3 CL4
0 A B C NaN NaN NaN
1 C A N NaN NaN NaN
我的目标:通过以下步骤在数据框中找到最多重复的单词组合。
-
- 使用 (,) 作为分隔符分隔每个值并添加到列
CL2
中:
- 使用 (,) 作为分隔符分隔每个值并添加到列
CL1 CL2 CL3 CL4
0 'A B C' 'A,B,C' NaN NaN
1 'C A N' 'C,A,N' NaN NaN
-
- 列
CL2
中列CL3
中的值的分隔:
- 列
CL1 CL2 CL3 CL4
0 'A B C' 'A,C' 'A','B','C' NaN
1 'C A N' 'C,N' 'C','A','N' NaN
-
- 列
CL4
的并集(统计集合论)
- 列
CL1 CL2 CL3 CL4
0 'A B C' 'A,'C' [ [A],[B],[C],[A,B],C],[B,C] ]
1 'C A N' 'C,'N' [ [C],[A],[N],[C,N],N] ]
-
- 在新数据框中的新列
CL4
中查找列CL5
的每个值的重复并添加到Count
:
- 在新数据框中的新列
CL5 Count
0 [A] 2
1 [B] 1
2 [C] 2
3 [D] 1
4 [N] 1
5 [A,B] 1
etc..
解决方法
您可以使用 split
by values by spacem 然后为所有组合调用自定义函数,对于计数使用 Series.explode
和 Series.value_counts
:
df = pd.DataFrame({'CL1':['A B C','C A N','D E F','F X G']},columns=['CL1','CL2','CL3','CL4'])
#https://stackoverflow.com/a/5898031/2901002
from itertools import chain,combinations
def all_subsets(ss):
return chain(*map(lambda x: combinations(ss,x),range(1,len(ss)+1)))
df = (df['CL1'].apply(lambda x: list(all_subsets(x.split())))
.explode()
.value_counts()
.rename_axis('CL5')
.reset_index(name='count'))
print (df.head(10))
CL5 count
0 (C,) 2
1 (F,) 2
2 (A,) 2
3 (E,F) 1
4 (F,G) 1
5 (A,B) 1
6 (C,A) 1
7 (A,C) 1
8 (F,X,G) 1
9 (D,) 1
df['CL5'] = df['CL5'].apply(list)
print (df.head(10))
CL5 count
0 [C] 2
1 [F] 2
2 [A] 2
3 [E,F] 1
4 [F,G] 1
5 [A,B] 1
6 [C,A] 1
7 [A,C] 1
8 [F,G] 1
9 [D] 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。