我有一个如下所示的df:
time A B C
0 0 19 19
1 0 4 4
2 0 0 0
3 0 0 0
4 0 4 4
我想创建一个新列,以产生列名,以表示A,B和C列之间每行的最大值。如果所有值均为0,则应产生NaN。如果有平局,则应产生两个值。我从这里开始有一个有用的答案,但是当所有列均为0并且不处理联系时,此函数将产生第一列名称。
name of column, that contains the max value
我想要的是这个
time A B C MAX
0 0 18 19 C
1 0 4 4 [B,C]
2 0 0 0 NaN
3 0 0 0 NaN
4 10 4 4 A
答案 0 :(得分:2)
您可以使用Apply:
def ma(xs):
lst = [name for name, x in zip(xs.index, xs) if x == max(xs) and x > 0]
if len(lst) == 1:
return lst[0]
return lst or np.nan
df['max'] = df[['A', 'B', 'C']].apply(ma, axis=1)
print(df)
输出
time A B C max
0 0 0 18 19 C
1 1 0 4 4 [B, C]
2 2 0 0 0 NaN
3 3 0 0 0 NaN
4 4 10 4 4 A