如何在列中查找值并在Python中返回列名
我有下面的透视表,最后一列返回行的最大值如何在列中查找值并在Python中返回列名,python,pandas,max,Python,Pandas,Max,我有下面的透视表,最后一列返回行的最大值 totalCount max hours 0 1 2 3 ... 21 22 23 username user_1 3 0 0 5
totalCount max
hours 0 1 2 3 ... 21 22 23
username
user_1 3 0 0 5 ... 0 0 1 5
user_2 0 0 6 0 ... 2 4 0 6
user_3 5 0 0 3 ... 0 0 1 5
user_4 0 2 3 0 ... 0 8 0 8
user_5 1 4 0 0 ... 5 9 2 9
现在我想添加另一列“hour”,它返回最大值所属列的名称
输出将如下所示:
totalCount max hour
hours 0 1 2 3 ... 21 22 23
username
user_1 3 0 0 5 ... 0 0 1 5 3
user_2 0 0 6 0 ... 2 4 0 6 2
user_3 5 0 0 3 ... 0 0 1 5 0
user_4 0 2 3 0 ... 0 8 0 8 22
user_5 1 4 0 0 ... 5 9 2 9 22
您知道如何创建此列以查找列名吗
如果在不同的列中重复最大值会怎么样?我猜会返回第一个具有该值的列的名称,但是否有任何代码可以获取出现该最大值的所有列的名称?(这是一个额外的问题,如果您能回答,我将不胜感激,但主要问题是前一个问题)。您可以使用.idxmax()
,它返回max元素的索引并与耦合。在轴=1上应用:
df['where_max'] = df.apply(lambda x: x.idxmax(), axis=1)
最简单的例子:
df = pd.DataFrame(data={'x': [1, 3, 4, 7], 'wave': [2, 2, 10, 0], 'y': [0,0,0,15]})
df['where_max'] = df.apply(lambda x : x.idxmax(), axis=1)
x wave y where_max
0 1 2 0 wave
1 3 2 0 x
2 4 10 0 wave
3 7 0 15 y
谢谢它适用于您的情况,但适用于我的情况,而不是仅获取列中的值,其中\u max
我得到的示例是:(totalCount,19)
。我怎么能像你的例子那样只得到19
的值呢?我想这是因为你有一个多级索引。您可以轻松地对其进行切片.apply(lambda x:x.idxmax()[1],axis=1)
这正是我想要的。谢谢