假設我有一個如下所示的資料框:
df = pd.DataFrame()
df['v'] = [0,0,0,0,0,1,1,1,1]
df['w'] = [1,1,1,1,1,0,0,0,0]
df['x'] = (df.v df.w) 10
df['y'] = (df.v df.w) 5
df['z'] = ...
我需要一個新列, df.z, 來等于df.x if df.v = 1和df.y if df.w = 1
當然,我可以df.apply在這里使用:
def non_vector(row):
if row['v'] == 1: return row['x']
if row['w'] == 1: return row['y']
df['z'] = df.apply(non_vector, axis=1)
print df
v w x y z
0 0 1 11 6 6
1 0 1 11 6 6
2 0 1 11 6 6
3 0 1 11 6 6
4 0 1 11 6 6
5 1 0 11 6 11
6 1 0 11 6 11
7 1 0 11 6 11
8 1 0 11 6 11
但是對于矢量化方法來說,這個問題似乎很簡單,因為這實際上非常緩慢。
任何幫助表示贊賞。
uj5u.com熱心網友回復:
為什么不這樣做:
df['z'] = np.where(df['v']==1, df['x'],np.where(df['v']==0,df['y'], np.nan))
如果df.v只取值 0 和 1,則
df['z'] = np.where(df['v']==1, df['x'],df['y'])
足夠。在這兩種情況下,你都會得到:
v w x y z
0 0 1 11 6 6.0
1 0 1 11 6 6.0
2 0 1 11 6 6.0
3 0 1 11 6 6.0
4 0 1 11 6 6.0
5 1 0 11 6 11.0
6 1 0 11 6 11.0
7 1 0 11 6 11.0
8 1 0 11 6 11.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/334979.html
標籤:Python 熊猫 python-2.7
上一篇:所以我用python做了一個檔案編輯程式……其中一個功能不正常
下一篇:如何使用串列呼叫函式?
