【问题标题】:Python Pandas remove the duplicate rows and keep the row with more values in CSVPython Pandas 删除重复的行并在 CSV 中保留具有更多值的行
【发布时间】:2020-03-24 13:39:50
【问题描述】:

我有如下所示的 2 个 CSV 文件和结果,我想在 XXX 位置编写代码,该代码将删除结果中的所有重复行,但要保留具有最大列值的行,例如,我想保留用 ADA 命名 a,而不是 NaN 行。我的代码在那里

    order  phone
name             
a       aa      1
b       bb      2
c       cc      3
     order  phone   ad
name                  
a       aa      1  ada
b       bb      2  adb
c       cc      3  adc
d       dd      4  add
     order  phone   ad
name                  
a       aa      1  NaN
b       bb      2  NaN
c       cc      3  NaN
a       aa      1  ada
b       bb      2  adb
c       cc      3  adc
d       dd      4  add   


 import csv
import os
import pandas as pd

df1 = pd.read_csv(r"1.csv",
                  index_col=[0], parse_dates=[0])
df2 = pd.read_csv(r"2.csv",
                  index_col=[0], parse_dates=[0])

print(df1)
print(df2)
finaldf = pd.concat([df1, df2], axis=0, join='outer', sort=False)
df = finaldf.loc[:,~finaldf.columns.duplicated()]
XXXX
print(finaldf)
print(df)

export_csv = df.to_csv(r'3.csv', index = None, header=True)

【问题讨论】:

  • groupby name 和 max 聚合
  • 或按值列排序并保留优先删除重复项

标签: python pandas csv duplicates


【解决方案1】:

您可以对具有 NA 的列的值进行排序,以将 NA 移动到 df 的底部。
然后使用 drop_duplicates 将保留第一行并删除具有 NA 的行,因为它们位于底部的最后。

df.sort_values(by="ad", na_position='last', inplace=True)
df.drop_duplicates(subset=["order", "phone"], keep="first", inplace=True)

另一种在不获取 NA 的情况下正确执行此操作的方法。

df = pd.merge(df1, df2, how='outer').set_index(df1.index)

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多