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
早上好!
我想找出数据集中每一行的最大值。
示例:
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