python - 数据框中每行最大值的列名

标签 python python-3.x pandas dataframe max

我有一个数据框,我想要一列填充每行的最大值,所以我使用了这个:

 df_1['Highest_Rew_patch'] = df_1.max(axis=1)

输出:

    Patch_0  Patch_1  Patch_2  ...  Patch_7  exp_patch  Highest_Rew_patch
0      0.0     70.0     70.0  ...      0.0          3               70.0
1      0.0     74.0     74.0  ...      0.0          4               74.0
2      0.0     78.0     78.0  ...      0.0          4               78.0
3      0.0     82.0     82.0  ...      0.0          4               82.0
4      0.0     82.0     82.0  ...      0.0          5               82.0
5      0.0     86.0     86.0  ...      0.0          6               86.0
6      0.0     90.0     90.0  ...      0.0          6               90.0
7      0.0     94.0     94.0  ...      0.0          6               94.0
8      0.0     98.0     98.0  ...      0.0          6               98.0
9      0.0     98.0     98.0  ...      0.0          7               98.0

但是我想要一些不同的结果:

Patch_0  Patch_1  Patch_2   Patch_7  exp_patch  Highest_Rew_patch
0        0.0      70.0      70.0       3            Patch_2,Patch_7...
1        0.0      74.0      74.0       4            Patch_2,Patch_7...

因此,我想要的是具有最高值的特定行的该列的标题,而不是行的最高值。

最佳答案

您可以选择以 Patch 开头的列,然后只保留值等于最大值的列名称:

>> s = df.iloc[:, df.columns.str.startswith('Patch')].apply(
   lambda s: s.index[s.eq(s.max())].tolist(), axis=1)

>> s 

0    [Patch_1, Patch_2]
1    [Patch_1, Patch_2]
2    [Patch_1, Patch_2]
3    [Patch_1, Patch_2]
4    [Patch_1, Patch_2]
5    [Patch_1, Patch_2]
6    [Patch_1, Patch_2]
7    [Patch_1, Patch_2]
8    [Patch_1, Patch_2]
9    [Patch_1, Patch_2]

或作为字符串连接:

>> s = s.apply(lambda s: ','.join(s))

>> s
0    Patch_1,Patch_2
1    Patch_1,Patch_2
2    Patch_1,Patch_2
3    Patch_1,Patch_2
4    Patch_1,Patch_2
5    Patch_1,Patch_2
6    Patch_1,Patch_2
7    Patch_1,Patch_2
8    Patch_1,Patch_2
9    Patch_1,Patch_2
dtype: object

然后只需分配新列:

df['Highest_Rew_patch'] = s

更新

要选择除最大值之外的其他顺序,我们可以使用 nlargest ,利用它删除重复项的优势,然后选择最后一个元素:

>> n_order = 2
>> s = df.iloc[:, df.columns.str.startswith('Patch')].apply(
      lambda s: s.index[s.eq(s.nlargest(n_order)[-1])].tolist(), axis=1)

>> s
0    [Patch_1, Patch_2]
1    [Patch_1, Patch_2]
2    [Patch_1, Patch_2]
3    [Patch_1, Patch_2]
4    [Patch_1, Patch_2]
5    [Patch_1, Patch_2]
6    [Patch_1, Patch_2]
7    [Patch_1, Patch_2]
8    [Patch_1, Patch_2]
9    [Patch_1, Patch_2]
dtype: object

关于python - 数据框中每行最大值的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68713249/

相关文章:

python - 从两个字符串获取后缀/前缀修正,将源字符串转换为Python中的目标字符串

python - 在 python 3 中使用 itertools.product 和列表

python - Pandas 将 csv 列值读取为列表

python - 如何为图例的个体值设置独特的颜色

python - 如何在Python中格式化具有多列但单行的数据框?

python - 如果我的整个训练集文档都是A类,我如何使用TF-IDF找到A类的其他文档?

Python-创建唯一元素的常量数组

python - 如何从字符串中获取正则表达式匹配的起始位置,而不在字符串本身中包含匹配的长度?

python - 如何在 python 中正确退出程序

python-3.x - 如何根据替代属性选择所有元素? [美汤]