【问题标题】:Pandas. Drop duplicate rows to another dataframe [duplicate]熊猫。将重复的行删除到另一个数据框[重复]
【发布时间】:2020-02-04 20:29:15
【问题描述】:

这里是数据示例:

import pandas as pd
df = pd.DataFrame({
    'file': ['file1','file2','file1','file2','file3','file3','file4','file5','file4','file5'],
    'prop1': ['True','False','True','False','False','False','False','True','False','False'],
    'prop2': ['False','False','False','False','True','False','True','False','True','False'],
    'prop3': ['False','True','False','True','False','True','False','False','False','True']
})

file    prop1   prop2   prop3
0   file1   True    False   False
1   file2   False   False   True
2   file1   True    False   False
3   file2   False   False   True
4   file3   False   True    False
5   file3   False   False   True
6   file4   False   True    False
7   file5   True    False   False
8   file4   False   True    False
9   file5   False   False   True

我需要将具有相同道具值的重复行删除到另一个数据框并将它们从原始文件中删除。
所以另一个数据框应该是这样的(重复的行不应该重复):

file    prop1   prop2   prop3
0   file1   True    False   False
3   file2   False   False   True
8   file4   False   True    False

df = df.drop_duplicates() 删除 onlu 1 个重复的行,但不是第二个这样的:

    file    prop1   prop2   prop3
0   file1   True    False   False
1   file2   False   False   True
4   file3   False   True    False
5   file3   False   False   True
6   file4   False   True    False
7   file5   True    False   False
9   file5   False   False   True

【问题讨论】:

  • 你试过drop_duplicates吗?
  • df.drop_duplicates()
  • 尝试:new_df = df.loc[df.duplicated()].copy() 将重复值存储到新数据帧中
  • 不确定是否有一种简单的方法可以获取您在预期输出中显示的确切索引。但是就足够了df.drop_duplicates(subset=[f'prop{i}' for i in range(1,4)])
  • 是的 drop_duplicated 有效,但我还需要从数据框中删除重复的行

标签: python python-3.x pandas


【解决方案1】:
uniques = df.drop_duplicates()
duplicates = df.iloc[list(set(df.index) - set(uniques.index))]

您可以先使用 pandas 方法 drop_duplicates() 创建一个只有唯一行的数据框。然后,您可以将原始数据帧的索引和帧中的索引与唯一行进行比较,“删除”索引是您的重复行,您可以从原始数据帧再次复制,以便现在拥有您的唯一行和重复行分开。

【讨论】:

    【解决方案2】:

    使用DataFrame.drop_duplicates 并通过选择指定列名 - 所有列都没有第一个:

    df = df.drop_duplicates(df.columns[1:])
    

    或者在列名中查找带有prop 的列:

    df = df.drop_duplicates(df.filter(like='prop').columns)
    

    print (df)
        file  prop1  prop2  prop3
    0  file1   True  False  False
    1  file2  False  False   True
    4  file3  False   True  False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2020-03-23
      • 2018-02-24
      • 2017-09-27
      • 2017-10-04
      • 2020-06-11
      • 2016-11-12
      相关资源
      最近更新 更多