![](/img/trans.png)
[英]Subsetting pandas dataframe for identical value on several consecutive columns
[英]Pandas dataframe ratio of difference of consecutive columns to first value
假設我有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
如何?
執行groupby
,使用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
您可以將結果除以df中移動的“數量”列:
diff_df.quantity = diff_df.quantity / df.quantity.shift(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.