2016-10-29 34 views
1

我有這個foll。數據幀:基於條件的熊貓差異行

region  country Season stage statistic value ps  ps_vals 
alabama  usa 2000 1  median  135.53 0  46.153846 
alabama  usa 2001 1  median  138.75 0  30.769231 
alabama  usa 2000 3  median  151  91.11 0 
alabama  usa 2001 3  median  148.125 46.666 8.333333 
california usa 2000 1  median  83.7191 3.2258 100 
california usa 2001 1  median  92.6332 6.4516 91.666667 
california usa 2000 3  median  49.2137 0  66.666667 
california usa 2001 3  median  108.029 58.0645 58.333333 

我想創建含有ps_vals之間的差的新數據幀,其中L.H.S爲值stage 3和R.H.D爲stage 1.例如值對於阿拉巴馬州來說,ps_vals值爲stage 3在2000年是0,而stage在2000年是46.153846,因此差異。將-46.153846

產生的數據幀應該是這樣的:

region  country Season ps_vals 
alabama  usa 2000 -46.153846 
alabama  usa 2001 -22.435898 
california usa 2000 -33.333333 
california usa 2001 -33.333334 

如何實現這一目標?我可以區分像這樣的連續行:df['dA'] = df['A'] - df['A'].shift(-1),但在這種情況下不起作用,因爲行可能不連續。

回答

1

自動合併僅使用階段1過濾的數據幀與階段3值過濾的數據幀。然後計算現在對齊的數據之間的差異:

results = df[df.stage==1].merge(df[df.stage==3], 
           on=['region', 'country', 'Season'], 
           suffixes = ('_x', '')) 

results.ps_vals -= results.ps_vals_x 

results[['region', 'country', 'Season', 'ps_vals']] 
Out[56]: 
     region country Season ps_vals 
0  alabama  usa 2000 -46.153846 
1  alabama  usa 2001 -22.435898 
2 california  usa 2000 -33.333333 
3 california  usa 2001 -33.333334