如何在 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_id
、beds
和 period
分组,因为数据帧比本例中的数据帧大。
我不清楚如何实现这一点,但我希望 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']
我有以下数据框 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_id
、beds
和 period
分组,因为数据帧比本例中的数据帧大。
我不清楚如何实现这一点,但我希望 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']