我连接了两个相似的数据框,它们具有很多重复的值,因为它们基本上是相同的数据集,但使用的年份不同。

问题在于,其中一组缺少某些值,而另一组有时具有这些值。

例如:

Name        Unit       Year      Level
Nik         1          2000      12
Nik         1                    12
John        2          2001      11
John        2          2001      11
Stacy       1                    8
Stacy       1          1999      8
.
.


我想在subset = ['Name', 'Unit', 'Level']上删除重复项,因为某些重复项没有年份。

但是,我留下了没有Year的数据,我想保留这些值的数据:

Name        Unit       Year      Level
Nik         1          2000      12
John        2          2001      11
Stacy       1          1999      8
.
.


如何保留这些值而不是空白?

最佳答案

sort_values与默认参数na_position='last'一起使用,因此应省略,然后drop_duplicates

print (df)
    Name  Unit    Year  Level
0    Nik     1     NaN     12
1    Nik     1  2000.0     12
2   John     2  2001.0     11
3   John     2  2001.0     11
4  Stacy     1     NaN      8
5  Stacy     1  1999.0      8

subset = ['Name', 'Unit', 'Level']
df = df.sort_values('Year').drop_duplicates(subset)


要么:

df = df.sort_values(subset + ['Year']).drop_duplicates(subset)




print (df)
    Name  Unit    Year  Level
5  Stacy     1  1999.0      8
1    Nik     1  2000.0     12
2   John     2  2001.0     11


带有GroupBy.first的另一个解决方案,用于按组返回第一个不丢失的Year值:

df = df.groupby(subset, as_index=False, sort=False)['Year'].first()
print (df)
    Name  Unit  Level    Year
0    Nik     1     12  2000.0
1   John     2     11  2001.0
2  Stacy     1      8  1999.0

关于python - 删除重复的行但保留某些值Pandas,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54219106/

10-09 02:46