2016-07-28 119 views
4

如何基於兩列的值在熊貓中進行條件分配?從概念上類似以下內容:熊貓,基於列值的條件列分配

Column_D = Column_B/(Column_B + Column_C) if Column_C is not null else Column_C 

具體的例子:

import pandas as pd 
import numpy as np 
df = pd.DataFrame({'b': [2,np.nan,4,2,np.nan], 'c':[np.nan,1,2,np.nan,np.nan]}) 


    b c 
0 2.0 NaN 
1 NaN 1.0 
2 4.0 2.0 
3 2.0 NaN 
4 NaN NaN 

我想有一個新的列d,其結果是由bc總和b列的劃分,如果c不爲空,否則該值應該是列c處的值。 概念上的東西像下面這樣:

df['d'] = df['b']/(df['b']+df['c']) if not df['c'].isnull() else df['c'] 

期望的結果:

 b c   d 
0 2.0 NaN  NaN 
1 NaN 1.0  1.0 
2 4.0 2.0  0.66 
3 2.0 NaN  NaN 
4 NaN NaN  NaN 

我怎樣才能做到這一點?

回答

6

試試這個(如果你想擁有你想要的結果集 - 檢查b列):

In [30]: df['d'] = np.where(df.b.notnull(), df.b/(df.b+df.c), df.c) 

In [31]: df 
Out[31]: 
    b c   d 
0 2.0 NaN  NaN 
1 NaN 1.0 1.000000 
2 4.0 2.0 0.666667 
3 2.0 NaN  NaN 
4 NaN NaN  NaN 

或此,檢查c柱:

In [32]: df['d'] = np.where(df.c.notnull(), df.b/(df.b+df.c), df.c) 

In [33]: df 
Out[33]: 
    b c   d 
0 2.0 NaN  NaN 
1 NaN 1.0  NaN 
2 4.0 2.0 0.666667 
3 2.0 NaN  NaN 
4 NaN NaN  NaN 
+0

簡短而親切。謝謝! – CentAu

+0

@CentAu,歡迎您! :) – MaxU

+1

@MaxU +1和gratz [熊貓]徽章。 – piRSquared