2017-01-03 115 views
1

我有以下數據框:比較兩列數據幀大熊貓創造第三個

In [25]: df1 
Out[25]: 
      a   b 
0 0.752072 0.813426 
1 0.868841 0.354665 
2 0.944651 0.745505 
3 0.485834 0.163747 
4 0.001487 0.820176 
5 0.904039 0.136355 
6 0.572265 0.250570 
7 0.514955 0.868373 
8 0.195440 0.484160 
9 0.506443 0.523912 

現在我想創造另一列df1['c'],其值將是最大的中df1['a']df1['b']。因此,我想有這樣的作爲輸出:

In [25]: df1 
Out[25]: 
      a   b  c 
0 0.752072 0.813426 0.813426 
1 0.868841 0.354665 0.868841 
2 0.944651 0.745505 0.944651 
3 0.485834 0.163747 0.485834 
4 0.001487 0.820176 0.820176 

我想:

In [23]: df1['c'] = np.where(max(df1['a'], df1['b'], df1['a'], df1['b']) 

但是,這將引發一個語法錯誤。我看不出有什麼辦法可以在熊貓中做到這一點。我的實際數據框太複雜了,所以我想爲此提供一個通用的解決方案。有任何想法嗎?

回答

3

您可以使用Series.where

df['c'] = df.b.where(df.a < df.b, df.a) 
print (df) 
      a   b   c 
0 0.752072 0.813426 0.813426 
1 0.868841 0.354665 0.868841 
2 0.944651 0.745505 0.944651 
3 0.485834 0.163747 0.485834 
4 0.001487 0.820176 0.820176 
5 0.904039 0.136355 0.904039 
6 0.572265 0.250570 0.572265 
7 0.514955 0.868373 0.868373 
8 0.195440 0.484160 0.484160 
9 0.506443 0.523912 0.523912 

解決方案與numpy.where

df['c'] = np.where(df['a'] > df['b'], df['a'], df['b']) 
print (df) 
      a   b   c 
0 0.752072 0.813426 0.813426 
1 0.868841 0.354665 0.868841 
2 0.944651 0.745505 0.944651 
3 0.485834 0.163747 0.485834 
4 0.001487 0.820176 0.820176 
5 0.904039 0.136355 0.904039 
6 0.572265 0.250570 0.572265 
7 0.514955 0.868373 0.868373 
8 0.195440 0.484160 0.484160 
9 0.506443 0.523912 0.523912 

或者simplier被發現max

df['c'] = df[['a','b']].max(axis=1) 
print (df) 
      a   b   c 
0 0.752072 0.813426 0.813426 
1 0.868841 0.354665 0.868841 
2 0.944651 0.745505 0.944651 
3 0.485834 0.163747 0.485834 
4 0.001487 0.820176 0.820176 
5 0.904039 0.136355 0.904039 
6 0.572265 0.250570 0.572265 
7 0.514955 0.868373 0.868373 
8 0.195440 0.484160 0.484160 
9 0.506443 0.523912 0.523912 
+0

工作!我不知道大熊貓在哪裏。 :) – Peaceful