微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能找到 DataFrame 中重复组合的频率 我的目标:通过以下步骤在数据框中找到最多重复的单词组合

如何解决我怎样才能找到 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  
 
         

我的目标:通过以下步骤在数据框中找到最多重复的单词组合。

    1. 使用 (,) 作为分隔符分隔每个值并添加到列 CL2 中:
     CL1     CL2     CL3  CL4 
0  'A B C'  'A,B,C'  NaN  NaN 
1  'C A N'  'C,A,N'  NaN  NaN 

    1. 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 

     
    1. 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] ] 
       
    1. 在新数据框中的新列 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.explodeSeries.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 举报,一经查实,本站将立刻删除。