Python 遍历行并比较每行中列的值

Python 遍历行并比较每行中列的值,python,pandas,Python,Pandas,我有一个数据帧df,它有两列和3000行。列名称为'1'和'2' 我想再添加两列。第一列遍历每行,比较每行中第1列和第2列的数据,然后输入具有最高值的列名 例如,如果在第500行,列'2'的值大于'1',则新的第一列将包含2。同样,新的第二列将具有第二大值的第二列名称。 我们是否可以对任意数量的列(而不仅仅是2列)进行常规设置,因为I可能需要增加列数。您可以直接比较这两列,并在数据帧本身中创建一个新列 In [27]: df = pd.DataFrame(np.random.rand(20,2)

我有一个数据帧df,它有两列和3000行。列名称为
'1'
'2'

我想再添加两列。第一列遍历每行,比较每行中第1列和第2列的数据,然后输入具有最高值的列名

例如,如果在第500行,列
'2'
的值大于
'1'
,则新的第一列将包含2。同样,新的第二列将具有第二大值的第二列名称。
我们是否可以对任意数量的列(而不仅仅是2列)进行常规设置,因为I可能需要增加列数。

您可以直接比较这两列,并在数据帧本身中创建一个新列

In [27]: df = pd.DataFrame(np.random.rand(20,2))
In [28]: df.columns = [1,2]
In [29]: df["Largest"] = pd.DataFrame(df[2]>df[1]).astype(int)+1

In [30]: df
Out[30]:
           1         2  Largest
0   0.315593  0.854372        2
1   0.067363  0.312327        2
2   0.650353  0.480793        1
3   0.653142  0.539709        1
4   0.077920  0.660042        2
5   0.676348  0.676716        2
6   0.252659  0.273548        2
7   0.146799  0.013372        1
8   0.891063  0.596015        1
9   0.054572  0.619679        2
10  0.311369  0.056108        1
11  0.288234  0.148597        1
12  0.056473  0.112157        2
13  0.263283  0.843832        2
14  0.098666  0.882066        2
15  0.655854  0.664619        2
16  0.873427  0.722233        1
17  0.421701  0.768081        2
18  0.303395  0.625726        2
19  0.648762  0.606731        1
类似地,您可以创建第二列

对于一般情况,可以使用
np.argsort
对列进行排序

In [159]: ranks = df.apply(np.argsort, axis=1)
In [160]: ranks
Out[160]:
   0  1  2  3  4
0  2  3  4  1  0
1  3  1  4  2  0
2  2  4  1  0  3
3  3  2  4  0  1
4  4  1  3  0  2

以下几点应该行得通。不过,也许还有更具蟒蛇风格的方式:

df2=df.copy()
df2['highest']=0
df2['second_highest']=0
for i in range(len(df)):
    l=sorted([(x, df.iloc[i][x]) for x in df.columns], key=lambda y: y[1])
    df2['highest'].iloc[i]=l[-1][0]
    df2['second_highest'].iloc[i]=l[-2][0]
print(df2)

这些答案很有用,谢谢,但是我们是否可以让它更通用,以处理2个以上的列为例,我们有10个列。我们是否可以迭代行并获得最大和第二个maxDone,我已经更新了代码以处理任意长度的列。