python - 用 Pandas DataFrame 中出现频率最高的单词替换单元格

标签 python regex pandas dataframe replace

我有一个像这样的 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 创建 DataFrameexpand=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/

相关文章:

python - 用列的顺序替换 Pandas 数据框中的值

python - Pandas:比较系列中的列表对象

python - 迭代两个列表,检查匹配项,然后重命名

c# regex 解析 ical 格式的文件并用结果填充对象

javascript - 正则表达式匹配不带路径的文件名

javascript - 正则表达式如何评估为不同的值

python - 如何处理列中的 unicode 值 dict

python - 使用PyAudio流畅播放音频

python - 为什么我的 Python 脚本没有将最后几行写入我的文件?

python - def anti_vowel - Codecademy (python)