簡體   English   中英

根據 Pandas 中其他列的一些值創建一個新列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM