【问题标题】:Search common items in 2 lists in pandas dataframe [duplicate]在熊猫数据框中的2个列表中搜索常见项目[重复]
【发布时间】:2021-03-14 19:14:21
【问题描述】:

我在包含列表的熊猫中有 2 列(输入和目标)。目的是找出这2个列表中有多少共同项,并将结果保存在新列“共同”中

对于第一行,只有“ELITE”相同。对于第二行,“ACURAWATCH”和“PLUS”都存在于两个列表中。

输入:

frame = pd.DataFrame({'input' : [['MINIVAN','TOURING','ELITE'], ['4D','SUV','ACURAWATCH','PLUS']], 'target' : [['MINI','TOUR','ELITE'], ['ACURAWATCH','PLUS']]})

预期输出:

frame = pd.DataFrame({'input' : [['MINIVAN','TOURING','ELITE'], ['4D','SUV','ACURAWATCH','PLUS']], 'target' : [['MINI','TOUR','ELITE'], ['ACURAWATCH','PLUS']], 'common' :[1, 2]})

【问题讨论】:

标签: python pandas list


【解决方案1】:

您可以将set.intersectiondf.apply 一起使用:

In [4307]: frame["common"] = frame.apply(
lambda x: len(set(x["input"]).intersection(set(x["target"]))), 1)

In [4308]: frame
Out[4308]: 
                         input               target  common
0    [MINIVAN, TOURING, ELITE]  [MINI, TOUR, ELITE]       1
1  [4D, SUV, ACURAWATCH, PLUS]   [ACURAWATCH, PLUS]       2

【讨论】:

    【解决方案2】:

    你可以使用:

    frame['common'] = [len(set(x) & set(y)) for x, y in frame.to_numpy()]
    print(frame)
    

    输出

                             input               target  common
    0    [MINIVAN, TOURING, ELITE]  [MINI, TOUR, ELITE]       1
    1  [4D, SUV, ACURAWATCH, PLUS]   [ACURAWATCH, PLUS]       2
    

    【讨论】:

      【解决方案3】:

      您可以使用np.intersect1d 应用自定义函数:

      frame['common'] = frame.apply(lambda x: len(np.intersect1d(x['input'],x['target'])), axis=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-07
        • 2022-11-01
        • 2018-11-04
        • 2016-06-23
        • 2018-07-18
        相关资源
        最近更新 更多