![](/img/trans.png)
[英]Create new pandas column based on categorical values in other column (python)
[英]Create a New Column Based on Some Values From Other Column in Pandas
想象一下這個數據集:
A
1 2
2 4
3 3
4 5
5 5
6 5
我想根據 A 的條件創建新列:
if A[i] < A[i-1] then B[i] = -1 else B[i] = 1
結果是:
A B
1 2 NaN
2 4 1
3 3 -1
4 5 1
5 7 1
6 6 -1
我發現的所有代碼和解決方案只是比較同一位置的行。
df['B']=[1 if i!=0 and df['A'][i] < df['A'][i-1] else -1 for i,v in enumerate(df['A'])]
或者
df['B']=[1 if i!=0 and df['A'][i] < df['A'][i-1] else -1 for i in range(len(df['A']))]
編輯(對於大於、小於和等於三種狀態):
import numpy as np
df['B']=np.NAN*len(df.a)
for i in range(1,len(df['a'])):
if df['a'][i] < df['a'][i-1]: df['B'][i]=1
elif df['a'][i] == df['a'][i-1]: df['B'][i]=0
else: df['B'][i]=-1
使用diff
function。然后使用sign
function:
df.assign(B = np.sign(df.A.diff()))
Out[248]:
A B
0 2 NaN
1 4 1.0
2 3 -1.0
3 5 1.0
4 7 1.0
5 6 -1.0
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [2,4,3,5,7,6]})
df['B'] = np.where(df['A'] < df['A'].shift(1), -1, 1)
為了在一開始就保留 nan :
df['B'] = np.where(df['A'].shift(1).isna(), np.nan, df['B'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.