Pandas:查找行中的最大值并检索它的列位置

Pandas: Find maximum value in row and retrieve it's column position

早上好!

我想找出数据集中每一行的最大值。

示例:

ID Age Col_A Col_B Col_C
1 20 1 5 3
2 NaN 6 8 9
3 25 5 6 7
4 30 3 4 6
5 NaN 6 2 1
6 27 1 8 4

然后,对于 ID #2,知道子集中的最大值 [Col_A; Col_B; Col_C] 是 Col_C 中的 9 我想输入缺失值作为 ID 的平均年龄,它在 Col_C 中也有最大值。

在这种情况下,ID #2 的年龄将是年龄 ID#3 和 ID#4 的平均值,即 28。

您可以创建一个临时列,使用 idxmax 显示每个 ID 的最大列,并按列执行,(axis=1),仅使用 Col_ 列。

然后使用 fillna and groupby.transform:

在新列上用分组平均值估算缺失的年龄
df['max_col'] = df.filter(like='Col_').idxmax(axis=1)
df['Age_filled'] = round(df['Age'].fillna(df.groupby('max_col')['Age'].transform('mean')))

打印:

  ID   Age  Col_A  Col_B  Col_C max_col
0   1  20.0      1      5      3   Col_B
1   2  28.0      6      8      9   Col_C
2   3  25.0      5      6      7   Col_C
3   4  30.0      3      4      6   Col_C
4   5   NaN      6      2      1   Col_A
5   6  27.0      1      8      4   Col_B

对于ID = 5,没有其他ID在Col_A中有最大值。所以对于这种场合,还是留np.nan