我有一个数据框df
,其中有2列和3000行。列名称为'1'
和'2'
我想再添加2列。第一列遍历每一行,比较每一行中第1列和第2列的数据,然后输入具有最高值的列名。
例如,如果在第500行,列'2'
的值大于'1'
,那么新的第一列将包含2。类似地,新的第二列将具有第二个最大值的第二列名称。
我们可以对任意数量的列(而不是仅2个)做一些通用的事情,因为我可能需要增加列数。
答案 0 :(得分:1)
您可以直接比较两列,并在数据框本身中创建一个新列,
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
答案 1 :(得分:0)
以下应能工作。也许还有更多的Python方式:
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)