2016-02-22 80 views
0

我正在使用一個熊貓數據框。我試圖創建一個新的列data ['Labels'],它包含由列數據['diff']中第i行和第i + n行之間的值變化確定的標籤,用於整個數據幀長度。python dataframe rows:if row + n> value at row,set variable to A

我想象下面的東西,然而這回我的錯誤:

for i in range(len(data['diff'])-1): 
    data.loc[data['diff'][i] >= data['diff'][i+n], 'Labels'] = 'A' 
    data.loc[data['diff'][i] < data['diff'][i+n], 'Labels'] = 'B' 

輸出示例:

index diff label 
9  117.32 B 
10 108.32 A 
11 125.36 A 
12 127.36 A 
13 139.28 A 
14 141.22 A 
15 147.89 A 
16 153.89 B 
17 153.89 B 
18 156.87 B 
19 168.84 B 
20 161.04 B 
21 172.04 B 
24 175.16 B 
22 164.04 B 
23 164.16 B 
27 175.16 B 
25 149.16 A 
+1

你可以做'數據[「標籤」] = NP:

df['following_max'] = df['diff'].iloc[::-1].cummax().iloc[::-1] 

每當在馬克斯比當前值,則應用標籤A .where(data ['diff']> = data ['diff']。shift(),'A','B') – EdChum

+0

Hi Ed, Thanks!這對於比較i和i + 1非常有用,但是我剛剛意識到我希望轉換也包括data ['diff'] [i]> = data ['diff] [i + n]的可能性。基本上,我想創建一個標籤,這取決於數據['差異']時間序列中任何地方的變化。 – wsp1morlet

+0

改變你的要求是不好的形式,你的評論還需要進一步的解釋嗎?或者你想比較'i'對一系列的行嗎? – EdChum

回答

0

如果我理解正確的話,你要在標籤設置爲A,如果有在以下任何一行中都是較高的值。

您可以通過cummax獲得剩餘行的最大值。但是,您需要首先恢復索引,否則cummax將返回前面行的最大值。你可以做到這一點與.iloc[::-1]

df['Labels'] = np.where(df['diff'] < df['following_max'], 'A', 'B')