【问题标题】:Check for identical lists rowise in pandas dataframe在 pandas 数据框中逐行检查相同的列表
【发布时间】:2021-12-17 00:07:46
【问题描述】:

您好,我有一列列表,我想返回列表相同且顺序相同的行。


d = {'id':[1,2,3], 'lst' : [['GG','PP', 'DD'],['DD','PP', 'GG'], ['GG','PP', 'DD']]}

dd = pd.DataFrame(d)
print(dd)
    id       lst
0   1   [GG, PP, DD]
1   2   [DD, PP, GG]
2   3   [GG, PP, DD]

我这样做了,但我得到了错误的输出

dd[dd.apply(lambda row: row.lst==row.lst, axis=1)]
    id       lst
0   1   [GG, PP, DD]
1   2   [DD, PP, GG]
2   3   [GG, PP, DD]

我想要的输出是这样的

   id       lst
0   1   [GG, PP, DD]
2   3   [GG, PP, DD]

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    Series.duplicatedkeep=False 与列表中的元组一起使用:

    df = dd[dd['lst'].apply(tuple).duplicated(keep=False)]
    print (df)
       id           lst
    0   1  [GG, PP, DD]
    2   3  [GG, PP, DD]
    

    【讨论】:

      【解决方案2】:

      有趣的是,当 lst 是一个列表的列表时,重复的数据框表示它是不可散列的。我认为熊猫应该通过将列表列表转换为元组列表来修改列表的重复允许列表,作为接受的答案。

      def find_duplicate(df, col):
          """
            df: dataframe
            col: column name
           """
           df_dup = df[df.duplicated(subset=col,keep=False)]
           return df_dup
      
       d = {'id':[1,2,3], 'lst' : ['c','b','c']}
      
       dd = pd.DataFrame(d)
       print(dd)
      
       print(find_duplicate(dd, 'lst'))
      

      输出:

         id lst
      0   1   c
      2   3   c
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 2021-06-26
        • 1970-01-01
        • 2021-02-22
        • 2021-08-02
        相关资源
        最近更新 更多