【问题标题】:Use issubset to compare set values between two pandas dataframe columns使用 issubset 比较两个 pandas 数据框列之间的设置值
【发布时间】:2018-11-19 23:36:09
【问题描述】:

我有一个 pandas 数据框,其中有两列填充了 pandas 集。我想检查一列中的所有值是否是另一列的子集。我认为下面的代码可以工作,但似乎你不能将 .issubset() 应用于两个系列。

例如:

data = [[['one','orange','green'],['one','orange']],[['milk','honey'],['Clarke', 'honey']]]

df = pd.DataFrame(data, columns=['Column_1','Column_2'])

Are_all_column_2_values_valid = df.loc[:, 'Column_2'].apply(set).issubset(df.loc[:, 'Column_1'])

desired_output = pd.series([True,False])

这两个集合中的所有值都是字符串。

任何帮助将不胜感激!

【问题讨论】:

    标签: python python-3.x pandas dataframe set


    【解决方案1】:

    首先确保您确实有一系列集合:

    df = df.apply(lambda x: x.apply(set))
    

    然后使用语法糖<=set.issubset

    print(df['Column_2'] <= df['Column_1'])
    
    0     True
    1    False
    dtype: bool
    

    【讨论】:

    • 有趣的解决方案。我正在尝试将集合应用于更大的熊猫数据框的两列。我试过: df['Column_1'] = df['Column_1'].apply(lambda x: x.apply(set)) 但得到一个错误'AttributeError: 'list' object has no attribute 'apply'' 你知道吗如何解决这个问题?
    【解决方案2】:

    您可以像这样使用列表推导:

    >>> [set(v).issubset(i) for v, i in zip(df.Column_2, df.Column_1)]
    [True, False]
    

    或作为一个系列:

    >>> pd.Series(set(v).issubset(i) for v, i in zip(df.Column_2, df.Column_1))
    0     True
    1    False
    dtype: bool
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多