在 pandas 中,如何B根據 中的列創建新A列df,例如:
B(i)=1如果A_(i-1)-A_(i) >= 0什么時候A_(i) <= 10B(i)=1如果A_(i-1)-A_(i) >= 2什么時候10 < A_(i) <= 20B(i)=1如果A_(i-1)-A_(i) >= 5什么時候20 < A_(i)B(i)=0對于任何其他情況
但是,第一個B_i值始終是兩個
例子:
| 一種 | 乙 |
|---|---|
| 5 | 2(第一個B_i) |
| 12 | 0 |
| 14 | 0 |
| 22 | 0 |
| 20 | 1 |
| 33 | 0 |
| 11 | 1 |
| 8 | 1 |
| 15 | 0 |
| 11 | 1 |
uj5u.com熱心網友回復:
您可以Pandas.shift用于創建A_(i-1)和Numpy.select用于檢查多個條件,如下所示:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[5,12,14,22,20,33,11,8,15,11]})
df['A_prv'] = df['A'].shift(1)
conditions = [
(df.index==0),
((df['A_prv'] - df['A'] >= 0) & (df['A'].le(10))),
((df['A_prv'] - df['A'] >= 2) & (df['A'].between(10, 20, inclusive='right'))),
# ^^^ 10 < df['A'] <= 20 ^^^
((df['A_prv'] - df['A'] >= 5) & (df['A'].ge(20)))
]
choices = [2, 1, 1, 1]
df['B'] = np.select(conditions, choices, default=0)
print(df)
輸出:
A A_prv B
0 5 NaN 2
1 12 5.0 0
2 14 12.0 0
3 22 14.0 0
4 20 22.0 1
5 33 20.0 0
6 11 33.0 1
7 8 11.0 1
8 15 8.0 0
9 11 15.0 1
uj5u.com熱心網友回復:
最直觀的方法是在單行中遍歷測驗所有三個條件的行if-else(因為對于所有真實條件,B(i) 為 1)。
import pandas as pd
df = pd.DataFrame({'A':[5,12,14,22,20,33,11,8,15,11]})
B = [2]
for i in range(1,len(df['A'])):
newvalue = 1 if (df['A'][i-1]-df['A'][i]>=0 and df['A'][i]<=10) or (df['A'][i-1]-df['A'][i]>=2 and df['A'][i]>10 and df['A'][i]<=20) or (df['A'][i-1]-df['A'][i]>=5 and df['A'][i]>20) else 0
B.append(newvalue)
df['B'] = B
print(df)
輸出:
A B
0 5 2
1 12 0
2 14 0
3 22 0
4 20 1
5 33 0
6 11 1
7 8 1
8 15 0
9 11 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454641.html
