获取比较多列的最大值并返回特定值

新手上路,请多包涵

我有一个像这样的数据框:

 Sequence    Duration1   Value1  Duration2   Value2  Duration3   Value3
1001        145         10      125         53      458         33
1002        475         20      175         54      652         45
1003        685         57      687         87      254         88
1004        125         54      175         96      786         96
1005        475         21      467         32      526         32
1006        325         68      301         54      529         41
1007        125         97      325         85      872         78
1008        129         15      429         41      981         82
1009        547         47      577         52      543         83
1010        666         65      722         63      257         87

我想在 (Duration1,Duration2,Duration3) 中找到 Duration 的最大值并返回相应的 Value & Sequence。

我想要的输出:

 Sequence,Duration3,Value3
1008,    981,      82

原文由 Rohit Lamba K 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 412
2 个回答

尝试以下主要基于 Numpy 的非常短的代码:

 vv = df.iloc[:, 1::2].values
iRow, iCol = np.unravel_index(vv.argmax(), vv.shape)
iCol = iCol * 2 + 1
result = df.iloc[iRow, [0, iCol, iCol + 1]]

结果是一个 _系列_:

 Sequence     1008
Duration3     981
Value3         82
Name: 7, dtype: int64

如果你想“重塑”它(第一个索引值,然后是实际值),你可以得到这样的执行:

 pd.DataFrame([result.values], columns=result.index)

原文由 Valdi_Bo 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于宽数据,首先使用 wide_to_long 进行整形会更容易。这将创建 2 列 ['Duration', 'Value'] ,MultiIndex 告诉我们它是哪个数字。不依赖于任何特定的列顺序。

 import pandas as pd

df = pd.wide_to_long(df, i='Sequence', j='num', stubnames=['Duration', 'Value'])
df.loc[[df.Duration.idxmax()]]

              Duration  Value
Sequence num
1008     3         981     82

原文由 ALollz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题