我有一個資料如下
Cust_ID Age Open_Balance
1 3 $50,000.00
1 -15 $51,000.00
1 59 $48,000.00
2 -1 $150,216.00
2 -1 $247,523.00
3 需要借助 [Age] 和 [Open_Balance] 中的資料在同一資料框中創建新列,如下所示。
**df['0 to 30']=(df['Open Balance'] if (df['Age ']>0 and df['Age ']<=30) else 0)**
**df['30 to 60']=(df['Open Balance'] if (df['Age ']>30 and df['Age ']<=60) else 0)**
**df['Negative_amount']=(df['Open Balance'] if (df['Age ']<0) else 0)**
結果:
Cust_ID Age Open Balance 0 to 30 30 to 60 Negative amount
1 3 $50,000.00 $50,000.00 0 0
1 -15 $51,000.00 0 0 $51,000.00
1 59 $48,000.00 0 $48,000.00 0
2 -1 $150,216.00 0 0 $150,216.00
2 -1 $247,523.00 0 0 $247,523.00
我是 python 的新手,并嘗試了很多來構建具有這些條件的邏輯,但無法實作。請幫助。
我試過如下:(但它的說法系列是模棱兩可的)
CMM['0 to 30'] = CMM['Open Balance '][CMM['Age '] > 0 & CMM['Age '] <= 30] raise ValueError( ValueError: 一個系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
uj5u.com熱心網友回復:
一堆numpy.where陳述句會在這里做
df['0 to 30'] = np.where( (df['Age']>0) & (df['Age']<=30) , df['Open_Balance'],0)
df['30 to 60'] = np.where( (df['Age']>30) & (df['Age']<=60) , df['Open_Balance'],0)
df['Negative_amount'] = np.where( df['Age']<0, df['Open_Balance'],0)
Cust_ID Age Open_Balance 0 to 30 30 to 60 Negative_amount
0 1 3 $50,000.00 $50,000.00 0 0
1 1 -15 $51,000.00 0 0 $51,000.00
2 1 59 $48,000.00 0 $48,000.00 0
3 2 -1 $150,216.00 0 0 $150,216.00
4 2 -1 $247,523.00 0 0 $247,523.00
uj5u.com熱心網友回復:
一個純粹的 Pandas 解決方案是這樣的:
df['0 to 30'] = df['Open Balance'][df['Age '] > 0 & df['Age '] <= 30]
df['30 to 60'] = df['Open Balance'][df['Age '] > 30 & df['Age '] <= 60]
df['Negative_amount'] = df['Open Balance'][df['Age '] < 0]
這會讓你的資料框留下一堆NaN值。您可以通過運行df.fillna()這些行來擺脫這些。
請注意,pandas 使用的條件語法與純 Python 代碼略有不同。在我們在常規 python if 陳述句中使用and和 的地方or,它們分別被Pandas 和 Numpy 中的&和替換|。
您可以在此處仔細查看 Pandas 索引: Pandas 索引檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/359724.html
上一篇:電子表格中的IF函式引數有問題
下一篇:JS:具有多個條件的回圈
