【问题标题】:Removing Dudplicate Rows based on two columns基于两列删除重复行
【发布时间】:2020-02-28 18:08:54
【问题描述】:

我有一个数据框,其中包含根据四列(SFDC_ID 和 left_side 和 right_SFDC_ID 以及 right_side 和相似性)的重复值:

目前 SFDC_ID 和 right_SFDC_ID 以下列方式复制:

SFDC_ID left_side   right_SFDC_ID   right_side  similairity

0013s00000vEVuwAAG  Hague Quality Water 0013s00000vEW72AAG  Hague Quality Waters    0.99023304
0013s00000vEW72AAG  Hague Quality Waters    0013s00000vEVuwAAG  Hague Quality Water 0.99023304

如果仔细观察,第 1 行的 SFDC_ID 与第 2 行的 right_SFDC_ID 相同。

如何使用 pandas 删除第二行?

【问题讨论】:

  • 我建议您更好地格式化您的数据,因为目前无法判断 Haque 水质是单独的列还是与 0013 组合...
  • 在 Stackoverflow 中更好地格式化它?我相信我更新了这个

标签: python pandas


【解决方案1】:

这是一种方法:

# compares which is greater based on alphabetical order and makes a bool series
mask = df['SFDC_ID'] < df['right_SFDC_ID'] 

# creates a new column checking True vs False, 

#if mask is true item in df['SFDC_ID'] is selected else item in df['right_SFDC_ID'] is selected

df['col1'] = df['SFDC_ID'].where(mask, df['right_SFDC_ID'])

#same as above but a column for df['right_SFDC_ID']
df['col2'] = df['right_SFDC_ID'].where(mask, df['SFDC_ID'])

# checks for duplicates in `col1` and `col2` and removes last duplicate
df = df.drop_duplicates(subset=['col1', 'col2'])

【讨论】:

  • 你能解释一下这到底是做什么的吗?
  • matches_df['SFDC_ID']
  • 您觉得我评论的答案有帮助吗?
  • 它对我不起作用 - 我仍然发现同样的问题
  • 根据您给出的示例,我了解您希望删除第二行,因为 'SFDC_ID' 或 'right_SFDC_ID' 是相同的。我上面提到的行正是这样做的。代码检查这两个列是否重复(以任何顺序)并仅保留第一次出现。
【解决方案2】:

您可以遍历行并删除前一行值匹配的行

for index,row in df[1::].iterrows():
    prev_SFDC_ID = df.iloc[index-1]['SFDC_ID'] #get prev SFDC_ID value
    if row['right_SFDC_ID'] == prev_SFDC_ID: 
        df.drop(index=index, inplace=True)

【讨论】:

    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2022-01-24
    • 2016-10-04
    • 1970-01-01
    • 2021-06-04
    • 2018-03-14
    • 2021-11-03
    相关资源
    最近更新 更多