我有下面的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()]
保留第一个日期列
答案 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