首页 > 解决方案 > 如何删除熊猫中具有重复名称的列但保留其中具有最大值的列?

问题描述

我有下面的熊猫数据框,我只需要保留一个包含最大元素的日期列并消除休息:

date         value_1      date        value_2    date         value_3
01-01-1990   1            01-01-1990  2          01-01-1990   4
02-01-1990   3            02-01-1990  20         
                          03-01-1990  30 

输出

date         value_1        value_2    value_3
01-01-1990   1              2          4
02-01-1990   3              20         
03-01-1990                  30

.T.drop_duplicates 不起作用。 df = df.loc[:,~df.columns.duplicated()]保留第一个日期列

标签: pandasdataframe

解决方案


利用:

df1 = df.loc[:,df.columns.duplicated(keep=False)]
idx = np.argmax(df1.count().values)

df = df.loc[:,~df.columns.duplicated()].assign(date=df1.iloc[:, idx])
print (df)
         date  value_1  value_2  value_3
0  01-01-1990      1.0        2      4.0
1  02-01-1990      3.0       20      NaN
2  03-01-1990      NaN       30      NaN

详情

首先过滤重复的date列:

df1 = df['date']
print (df1)
         date        date        date
0  01-01-1990  01-01-1990  01-01-1990
1  02-01-1990  02-01-1990         NaN
2         NaN  03-01-1990         NaN

通过以下方式获取非 NaN 值的数量DataFrame.count

print (df1.count())
date    2
date    3
date    1
dtype: int64

列名相同,因此np.argmax用于位置:

print (df1.count().values)
[2 3 1]

idx = np.argmax(df1.count().values)
print (idx)
1

最后选择iloc

print (df1.iloc[:, idx])
0    01-01-1990
1    02-01-1990
2    03-01-1990
Name: date, dtype: object

推荐阅读