2016-12-13 1 views
2

가정하자 I는 (df를 불림) DataFrame이팬더 dataframe 비율

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

I 연속 컬럼의 차이의 비와 열을 포함하는 다른 dataframe을 (구축하려는 어떤 열 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)