如何基于熊猫中的多个列获取列名?

时间:2019-05-03 10:05:29

标签: pandas

目标:

创建列

fst_imp:返回列名,其中值是每行最小值的索引。

snd_imp:value是列名,其中value是每一行的第二个小值的索引。

trd_imp:value是列名,其中value是每一行的第三个小值的索引。

示例结果:

   A  B  C  fst_imp  snd_imp trd_imp
0  1  2  3   A         B      C
1  6  5  4   C         B      A
2  7  9  8   A         C      B

1 个答案:

答案 0 :(得分:2)

这是使用numpy.argsortpandas.DataFrame构造函数和DataFrame.join的一种潜在解决方案:

# Setup
import numpy as np
df = pd.DataFrame({'A': {0: 1, 1: 6, 2: 7}, 'B': {0: 2, 1: 5, 2: 9}, 'C': {0: 3, 1: 4, 2: 8}})

df.join(pd.DataFrame([df.columns.values[x] for x in np.argsort(df.values)],
                     columns=['fst_imp', 'snd_imp', 'trd_imp']))

[出]

   A  B  C fst_imp snd_imp trd_imp
0  1  2  3       A       B       C
1  6  5  4       C       B       A
2  7  9  8       A       C       B

或者更具扩展性...

df.join(pd.DataFrame([df.columns.values[x] for x in np.argsort(df.values)]))

[出]

   A  B  C       0       1       2
0  1  2  3       A       B       C
1  6  5  4       C       B       A
2  7  9  8       A       C       B