Python将删除重复的行,并在CSV中保留具有更多值的行
我有如下所示的2个CSV文件和结果,我想在XXX位置编写代码,删除结果中的任何重复行,但要保留列值最大的行,例如,我想保留名称a和ADA,而不是NaN行。我的代码在下面Python将删除重复的行,并在CSV中保留具有更多值的行,python,pandas,csv,duplicates,Python,Pandas,Csv,Duplicates,我有如下所示的2个CSV文件和结果,我想在XXX位置编写代码,删除结果中的任何重复行,但要保留列值最大的行,例如,我想保留名称a和ADA,而不是NaN行。我的代码在下面 order phone name a aa 1 b bb 2 c cc 3 order phone ad name a aa 1 ada b
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)
您可以对包含NAs的列的值进行排序,以将NAs移动到df的底部。
然后,使用drop_duplicates将保留第一行和具有NAs的drop行,因为它们位于最后一行的底部
df.sort_values(by="ad", na_position='last', inplace=True)
df.drop_duplicates(subset=["order", "phone"], keep="first", inplace=True)
另一种在不使用NAs的情况下正确执行此操作的方法
df = pd.merge(df1, df2, how='outer').set_index(df1.index)
groupby name并使用maxOr sort by value列进行聚合,并使用keep first删除重复项