簡體   English   中英

如何在熊貓中將兩個連續的行划分為一組

[英]How to divide two consecutive rows in a group in pandas

我有以下數據框

d = {'id': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5,], 'value': [21, 44, 51, 10, 30, 7, 15, 51, 24, 122, 36, 41, 15, 12, 35, ], 'year': [2007, 2007, 2007, 2007, 2007, 2009, 2009, 2009, 2009, 2009, 2008, 2008, 2008, 2008, 2008]}
df = pd.DataFrame(d, columns = ['id','value','year'])

我想按ID和Year分組。 然后,我想獲得每年的價值之間的差異百分比。

我可以得到每年之間的差異

df["difprev"]= df.sort_values(by=['id','year']).groupby(['id']).value.diff()

但是我不知道如何將每個差異“ difprev”除以上一個,以得到每年的百分比(de)增加,因為我找不到與diff()類似的groupby函數

你能幫助我嗎? 謝謝

df = df.sort_values(by=['id','year'])
df['percdif']=df.difprev / df.value.shift() * 100

結果:

    id  value  year  difprev     percdif
0    1     21  2007      NaN         NaN
10   1     36  2008     15.0   71.428571
5    1      7  2009    -29.0  -80.555556
1    2     44  2007      NaN         NaN
11   2     41  2008     -3.0   -6.818182
6    2     15  2009    -26.0  -63.414634
2    3     51  2007      NaN         NaN
12   3     15  2008    -36.0  -70.588235
7    3     51  2009     36.0  240.000000
3    4     10  2007      NaN         NaN
13   4     12  2008      2.0   20.000000
8    4     24  2009     12.0  100.000000
4    5     30  2007      NaN         NaN
14   5     35  2008      5.0   16.666667
9    5    122  2009     87.0  248.571429

參見https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.rolling.html

grouped = df.sort_values(by=['id','year']).groupby(['id'])
grouped.value.rolling(2).apply(lambda x: (x[1]-x[0])/x[0])

輸出:

id    
1   0          NaN
    10    0.714286
    5    -0.805556
2   1          NaN
    11   -0.068182
    6    -0.634146
3   2          NaN
    12   -0.705882
    7     2.400000
4   3          NaN
    13    0.200000
    8     1.000000
5   4          NaN
    14    0.166667
    9     2.485714
Name: value, dtype: float64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM