Python 遍历行并比较每行中列的值
我有一个数据帧df,它有两列和3000行。列名称为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)
'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,我已经更新了代码以处理任意长度的列。