2017-12-02 101 views
0

我試圖在熊貓數據框中創建一個新列,然後根據條件格式分配一個整數值。一個例子是:熊貓DataFrame:如果滿足多個條件,則將整數分配給新列

如果((A> 1)&(一個< 5))得到值10,如果((A> = 5)&(一個< 10))得到的值24,如果((一> 10)&(a < 5))給出值57

其中'a'是數據框中的另一列。

有沒有辦法做到這一點與熊貓/ numpy沒有創建一個函數?我嘗試了幾種不同的選擇,但都沒有成功

+0

發佈您的數據框的例子會有所幫助。可能很難理解這個。數據框中的'a'是另一列嗎?或一些隨機變量? – Abhishek

回答

0

使用pd.cut

df = pd.DataFrame({'a': [ 
    2, 3, 5,7,8,10,100]}) 
pd.cut(df.a,bins=[1,5,10,np.inf],labels=[10,24,57]) 
Out[282]: 
0 10 
1 10 
2 10 
3 24 
4 24 
5 24 
6 57 
Name: a, dtype: category 
Categories (3, int64): [10 < 24 < 57] 
+0

@丹是幫助,你能考慮接受嗎? – Wen

+0

當然,應該做到了 – Dan

-1

我想這樣做,而無需創建功能將是非常迂迴的任何方式,但它實際上不是太糟糕了功能。此外,你的條件並不真正相互關聯,但我認爲這是一個錯字。如果你的條件比較簡單,可以快速定義你的功能,讓您的代碼緊湊:

df['new column'] = df['a'].apply(lambda x: 10 if x < 5 else 24 if x < 10 else 57) 

,可以得到一點毛茸茸的,如果你的條件,更complicatied - 這是更容易,如果你定義的功能來管理更明確:

def f(x): 
    if x > 1 and x < 5: return 10 
    elif x >= 5 and x < 10: return 14 
    else: return 57 

df['new column'] = df['a'].apply(f) 

如果你真的想避免的功能,我能想到的是創建一個新的列表爲新柱,通過你的數據迭代,然後將它添加到您的數據框填充它的最好的:

newcol = [] 
for a in df['a'].values: 
    if x > 1 and x < 5: newcol.append(10) 
    elif x >= 5 and x < 10: newcol.append(24) 
    else: newcol.append(57) 
df['newcol'] = newcol 
相關問題