首页 > 解决方案 > 如何检查一个单词列表是否包含在熊猫数据框中的另一个列表中?

问题描述

我正在尝试比较数据框中不同列中的两个单词列表并打印常用单词。之后,我想计算一列common_count,即常用词的数量除以第一个列表中的总词数。最终输出将如下所示:

在此处输入图像描述

用于创建数据框的片段:

raw_data = [{'id': 1, 'name': '[corporation, fluor]', 'name_ref': '[constructors, fluor, incorporated, intl]'},\
        {'id': 2, 'name': '[community, foundation]', 'name_ref': '[community, county, foundation, of, the, westmoreland]'},\
        {'id': 3, 'name': '[fo, minnesota, vikings]', 'name_ref': '[development, inc, minnesota, vikings]'}]

df = pd.DataFrame.from_dict(raw_data)

请建议我如何在 pandas 或 pyspark 方法中导出commoncommon_count列。

标签: pythonpandaslistapache-sparkpyspark

解决方案


这是使用 pandas 的方法:

def string_to_array(s):
    return [x.strip() for x in s.strip("[]").split(",")]


df['name'] = df['name'].apply(string_to_array)
df['name_ref'] = df['name_ref'].apply(string_to_array)
df['common'] = [list(set(x[1]) & set(x[2])) for x in df.values]
df['common_count'] = df['common'].str.len() / df['name'].str.len()

print(df)

#    id                      name                                           name_ref                   common  common_count
# 0   1      [corporation, fluor]          [constructors, fluor, incorporated, intl]                  [fluor]      0.500000
# 1   2   [community, foundation]  [community, county, foundation, of, the, westm...  [community, foundation]      1.000000
# 2   3  [fo, minnesota, vikings]             [development, inc, minnesota, vikings]     [minnesota, vikings]      0.666667

推荐阅读