然后按类别分组,对新年和旧年进行划分

2024-04-25 23:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

样本数据集:

import pandas as pd
  
df = pd.DataFrame({'Year':[1995, 1996, 1997, 1998, 1999, 2000,1995, 1996, 1997, 1998, 1999, 2000],
                   'Group':['A', 'A', 'A','A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
                         'Col_1':[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200],
                         'Col_2':[11, 22, 33, 44, 55, 66, 77, 88, 99, 199, 299, 399]})

我想创建一个新的列,将每个组的第1列和第2列中的前一年分别除以一年。然后,将这两部分分开。见下例:

^{tb1}$

Tags: 数据importdataframepandasdfasgroupcol
1条回答
网友
1楼 · 发布于 2024-04-25 23:43:19

先决条件是这一年已排序,没有年份缺失。您可以^{}“Group”计算^{}并使用^{}对结果列进行划分:

除法

df['New Column'] = (df.groupby('Group')[['Col_1','Col_2']]
                      .pct_change().add(1)
                      .eval('Col_1/Col_2')
                   )

输出:

    Year Group  Col_1  Col_2  New Column
0   1995     A    100     11         NaN
1   1996     A    200     22    1.000000
2   1997     A    300     33    1.000000
3   1998     A    400     44    1.000000
4   1999     A    500     55    1.000000
5   2000     A    600     66    1.000000
6   1995     B    700     77         NaN
7   1996     B    800     88    1.000000
8   1997     B    900     99    1.000000
9   1998     B   1000    199    0.552764
10  1999     B   1100    299    0.732107
11  2000     B   1200    399    0.817498

差异划分(初始问题)

df['New Column'] = (df.groupby('Group')[['Col_1','Col_2']]
                      .diff()
                      .eval('Col_1/Col_2')
                   )

输出:

    Year Group  Col_1  Col_2  New Column
0   1995     A    100     11         NaN
1   1996     A    200     22    9.090909
2   1997     A    300     33    9.090909
3   1998     A    400     44    9.090909
4   1999     A    500     55    9.090909
5   2000     A    600     66    9.090909
6   1995     B    700     77         NaN
7   1996     B    800     88    9.090909
8   1997     B    900     99    9.090909
9   1998     B   1000    199    1.000000
10  1999     B   1100    299    1.000000
11  2000     B   1200    399    1.000000

相关问题 更多 >