如何删除在熊猫中具有重复名称但保留其中最大值的列?

时间:2018-09-24 09:41:22

标签: pandas dataframe

我有下面的pandas数据框,我只需要保留一个包含最多元素的日期列,并消除其余部分:

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()]保留第一个日期列

1 个答案:

答案 0 :(得分:1)

使用:

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

通过DataFrame.count获取非NaN值的数量:

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