如何在 pandas 中分组并应用函数

How to groupby and apply a function in pandas

我有以下数据框 df:

    period  remaining_et_months  property_id  beds
0        0                    0          329     1
1        1                    0          329     1
2        2                    1          329     1
3        3                    2          329     1
4        3                    2          329     1
5        4                    3          329     1
6        4                    3          329     1
7        4                    3          329     1
8        5                    4          329     1
9        5                    4          329     1
10       5                    4          329     1
11       5                    4          329     1

我需要对这个数据框进行分组并应用一个函数,以便我能够计算一个名为 dist_period:

的列
g = df.groupby(['property_id', 'beds', 'period'])
g.apply(some_function)

我需要按 property_idbedsperiod 分组,因为数据帧比本例中的数据帧大。

我不清楚如何实现这一点,但我希望 dist_period 列是这样的:

    period  remaining_et_months  dist_period
0        0                    0            0
1        1                    0            1 
2        2                    1            1
3        3                    2            1
4        3                    2            2
5        4                    3            1
6        4                    3            2
7        4                    3            3
8        5                    4            1
9        5                    4            2
10       5                    4            3
11       5                    4            4

请注意,当组只有一个元素时,dist_period 的值为 period - remaining_et_months,但当组中有多个元素时(请参阅周期为 3、4 或 5 时),然后执行从 1 开始的计数。

获取多个行组计数的 cumcount(编辑:注意这是从 0 开始计数):

df['dist_period'] = df.groupby(['property_id', 'beds', 'period']).cumcount()

然后你只需添加句点和remaining_et_months之间的差异:

df['dist_period'] = df['period'] - df['remaining_et_months'] + df['dist_period']