我有一个像这样的数据框:
ID date var1 var2 var3
AB 22/03/2020 0 1 3
AB 29/03/2020 0 3 3
CD 22/03/2020 0 1 1
我想要一个新的数据集,如果它是最大列(也可能发生平局),则在行上留下与原始数据集相同的数量;否则如果不是最大值则设置-1。所以它会是:
ID date var1 var2 var3
AB 22/03/2020 -1 -1 3
AB 29/03/2020 -1 3 3
CD 22/03/2020 -1 1 1
但我根本不知道如何做到这一点。接下来我可以尝试什么?
DataFrame.select_dtypes
:
df1 = df.select_dtypes(np.number)
DataFrame.iloc
:
df1 = df.iloc[:, 2:]
或通过
var
选择带有
DataFrame.filter
标签的列:
df1 = df1.filter(like='var')
DataFrame.where
和 max
: 设置新值
df[df1.columns] = df1.where(df1.eq(df1.max(1), axis=0), -1)
print (df)
ID date var1 var2 var3
0 AB 22/03/2020 -1 -1 3
1 AB 29/03/2020 -1 3 3
2 CD 22/03/2020 -1 1 1
使用
where
和日期 back
s=df.loc[:,'var1':]
df.update(s.where(s.eq(s.max(1),axis=0),-1))
df
ID date var1 var2 var3
0 AB 22/03/2020 -1 -1 3
1 AB 29/03/2020 -1 3 3
2 CD 22/03/2020 -1 1 1