使用Python';s max在一个数据帧的列中返回两个同样大的值
我希望找到每行具有最大值的数据帧列,如果有多个同样大的值,则返回这些值所在的所有列名。我想将所有这些值存储在数据框的最后一列中。我一直在引用以下帖子,不确定如何修改它以处理数据帧: 如果我的数据是这样的使用Python';s max在一个数据帧的列中返回两个同样大的值,python,pandas,dataframe,max,Python,Pandas,Dataframe,Max,我希望找到每行具有最大值的数据帧列,如果有多个同样大的值,则返回这些值所在的所有列名。我想将所有这些值存储在数据框的最后一列中。我一直在引用以下帖子,不确定如何修改它以处理数据帧: 如果我的数据是这样的 Key Column_1 Column_2 Column_3 0 1 2 3 1 1 1 0 2 0 0 0 我的目标是输出如下所示: K
Key Column_1 Column_2 Column_3
0 1 2 3
1 1 1 0
2 0 0 0
我的目标是输出如下所示:
Key Column_1 Column_2 Column_3 Column_4
0 1 2 3 Column_3
1 1 1 0 Column_1,Column_2
2 0 0 0 NA
我知道如何使用idxmax(axis=1,skipna=True)返回第一个max,并且知道如果在数据帧中将0更改为Nan,它将正确填充最后一行,只是不确定当存在多个max值时如何执行此操作
非常感谢您的帮助!我是一名R程序员,这是我第一次使用Python。同时使用
dot
,并将其与mask
相结合:
d = df.set_index('Key').select_dtypes('number')
v = d.eq(d.max(axis=1), axis=0).dot(d.columns + ',').str.rstrip(',')
df['Column_4'] = v.mask(d.eq(0).all(axis=1)))
这个很好用,谢谢!我的数据框将同时包含数字列和非数字列。我显然只想要非数值列的最大值。这个脚本能解释这一点吗。我总是可以预先对数据帧进行子集划分,然后重新加入。或者有没有一种方法可以在这里进行子集划分,比如按列索引?添加了
选择\u dtypes
,这样您就可以只抓取数字列了!我得到这个错误:类型错误:数据类型“数值”不理解。当我使用df.dtypes时,我的数字列是float64。我是否应该将脚本中的“numeric”替换为“float64”?它是number
而不是numeric
。这应该可以工作d.notna().dot(d.columns+',')。str.rstrip(',')
应该可以工作
Key Column_1 Column_2 Column_3 Column_4
0 0 1 2 3 Column_3
1 1 1 1 0 Column_1,Column_2
2 2 0 0 0 NaN