我有以下数据透视表,最后一列返回该行的最大值。
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
现在,我想添加另一列“小时”,以返回最大值所属的列的名称。
输出如下:
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
关于如何创建可查找列名的列的任何想法?
如果最大值在各列中重复怎么办?我想我会返回具有该值的第一列的名称,但是是否有任何代码可以获取出现此最大值的所有列名称? (这是一个额外的问题,如果您可以回答,我将不胜感激,但主要的问题是上一个)。
答案 0 :(得分:0)
您可以使用.idxmax()
返回max元素的索引,并在.apply
上返回axis=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