我有一个像这样的 DataFrame:
df = pd.DataFrame({'Source1': ['Corona,Corona,Corona','Sars,Sars','Corona,Sars',
'Sars,Corona','Sars'],
'Area': ['A,A,A,B','A','A,B,B,C','C,C,B,C','A,B,C']})
df
Source1 Area
0 Corona,Corona,Corona A,A,A,B
1 Sars,Sars A
2 Corona,Sars A,B,B,C
3 Sars,Corona C,C,B,C
4 Sars A,B,C
我想检查每一列的每个单元格(真实数据有很多列)并找到每个唯一词的频率(我们可以通过','来区分唯一词),并将整个条目替换为最频繁的词单词。
在平局的情况下,替换哪个词并不重要。所以所需的输出将如下所示:
df
Source Area
0 Corona A
1 Sars A
2 Corona B
3 Sars C
4 Sars A
在这种情况下,当出现平局时,我随机选择了第一个单词,但这并不重要。
提前致谢。
最佳答案
通过 Series.str.split
创建 DataFrame
和 expand=True
并使用 DataFrame.mode
按位置选择第一列:
df['Source1'] = df['Source1'].str.split(',', expand=True).mode(axis=1).iloc[:, 0]
df['Area'] = df['Area'].str.split(',', expand=True).mode(axis=1).iloc[:, 0]
print (df)
Source1 Area
0 Corona A
1 Sars A
2 Corona B
3 Sars C
4 Sars A
关于 collections.Counter.most_common
的另一个想法:
from collections import Counter
f = lambda x: [Counter(y.split(',')).most_common(1)[0][0] for y in x]
df[['Source1', 'Area']] = df[['Source1', 'Area']].apply(f)
#all columns
#df = df.apply(f)
print (df)
Source1 Area
0 Corona A
1 Sars A
2 Corona B
3 Sars C
4 Sars A
关于python - 用 Pandas DataFrame 中出现频率最高的单词替换单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61183972/