我有一个panda Dataframe Cellvoltage,它有多列浮点值,我试图得到每一行中所有等于最大值的值的索引。
为了达到这个目的,我使用了下面的代码:
req_indices = np.argwhere(Cellvoltage.values == np.amax(Cellvoltage.values, axis=1).reshape(-1,1))
max_voltage_idx = [0]*len(req_indices)
for x,y in req_indices:
if max_voltage_idx[x] == 0:
max_voltage_idx[x] = [y]
else:
max_voltage_idx[x].append(y)
Cellvoltage['max_voltage_idx'] = pd.Series(max_voltage_idx).apply(np.array)
有没有更好/更快的方法来实现同样的目标?
2条答案
按热度按时间62lalag41#
使用
df.eq(df.max(axis=1), axis=0)
和where
屏蔽非最大值,然后使用stack
删除NaN并获取索引对。输入示例:
输出:
如果只想将列表中的列作为新列,请添加
groupby.agg
步骤:输出:
ds97pgxw2#
另一种可能的解决方案:
输出:
输入:
同样的@mozway(我感谢他)使用: