2016-12-13 16 views
2

が、私は(私がしたいことは、連続する列の差異の割合でカラムを含む別のデータフレームを構築してDATAFRAME(dfと呼ばれる)パンダ最初の値に連続した列の差のデータフレーム比

'name' 'order' 'quantity' 
'A'  1   10 
'A'  2   15 
'A'  3   5 
'B'  1   2 
'B'  2   6 

を持っていると仮定列orderで連続)を最初の値に設定します。

私は

def compute_diff(x): 

    quantity_diff = x.quantity.diff() 

    return quantity_diff 

diff_df = df.sort_values('order').groupby('name').apply(compute_diff).reset_index(name='diff') 

として簡単に言っ比(分子)の違いを取得できていますこれは、今、私が説明に従って、代わりに比率をしたい私に

'name' 'level_1' 'quantity' 
'A'  0   NaN 
'A'  1   5 
'A'  1   -10 
'B'  1   NaN 
'B'  2   4 

を与えます。具体的には、私は望むでしょう

'name' 'level_1' 'quantity' 
'A'  1   NaN 
'A'  2   0.5 
'A'  3   -0.6666 
'B'  1   NaN 
'B'  2   2 

どのようにですか?

答えて

3

pct_change使用:

# Sort the DataFrame, if necessary. 
df = df.sort_values(['name', 'order']) 

# Use groupby and pcnt_change on the 'quantity' column. 
df['quantity'] = df.groupby('name')['quantity'].pct_change() 

結果の出力:

name order quantity 
0 A  1  NaN 
1 A  2 0.500000 
2 A  3 -0.666667 
3 B  1  NaN 
4 B  2 2.000000 
1

あなたの結果を取り、DFにシフト '数量' 列で、それを分割できます。あなたのgroupbyを実行した後

diff_df.quantity = diff_df.quantity/df.quantity.shift(1) 
関連する問題