按用户 ID 指示的具有最大行数的数据集

问题描述 投票:0回答:2

我有一个像这样的数据框:

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

但我根本不知道如何做到这一点。接下来我可以尝试什么?

python-3.x pandas max
2个回答
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

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
© www.soinside.com 2019 - 2024. All rights reserved.