Pandas自定义二级groupby函数
Pandas custom second level groupby function
我有这个:
df = pd.DataFrame({'sku_id' : ['A','A','A','B','C','C'],
'order_counts' : [1,2,3,1,1,2],
'order_val' : [10,20,30,10,10,20]})
创建:
使用 df.groupby('sku_id').sum()
的 sku_id
的简单 groupby()
会得到:
两级分组 df.groupby(['sku_id', 'order_counts']).sum()
会给出:
但现在我想要在 order_counts
上进行自定义二级分组,这样任何 order_counts == 1
都被视为一个组,而任何 order_counts > 1
都被分组到一个标记为 [=20 的组中=](重复订单)
结果如下所示:
sku_id order_counts order_val
A 1 10
R 50
B 1 10
C 1 10
R 20
有没有办法提供自定义 groupby 函数来实现此目的?
Mask
order_counts
列中的 != 1
值与 R
,然后使用 groupby
+ sum
g = df['order_counts'].mask(df['order_counts'] != 1, 'R')
df.groupby(['sku_id', g])['order_val'].sum()
结果
sku_id order_counts
A 1 10
R 50
B 1 10
C 1 10
R 20
Name: order_val, dtype: int64
在你 groupby
之前 assign
怎么样?
new_df = (df
.assign(order_counts=lambda x: np.where(x['order_counts'] > 1, 'R', x['order_counts']))
.groupby(['sku_id', 'order_counts'])
.sum()
)
输出:
>>> new_df
order_val
sku_id order_counts
A 1 10
R 50
B 1 10
C 1 10
R 20
我有这个:
df = pd.DataFrame({'sku_id' : ['A','A','A','B','C','C'],
'order_counts' : [1,2,3,1,1,2],
'order_val' : [10,20,30,10,10,20]})
创建:
使用 df.groupby('sku_id').sum()
的 sku_id
的简单 groupby()
会得到:
两级分组 df.groupby(['sku_id', 'order_counts']).sum()
会给出:
但现在我想要在 order_counts
上进行自定义二级分组,这样任何 order_counts == 1
都被视为一个组,而任何 order_counts > 1
都被分组到一个标记为 [=20 的组中=](重复订单)
结果如下所示:
sku_id order_counts order_val
A 1 10
R 50
B 1 10
C 1 10
R 20
有没有办法提供自定义 groupby 函数来实现此目的?
Mask
order_counts
列中的 != 1
值与 R
,然后使用 groupby
+ sum
g = df['order_counts'].mask(df['order_counts'] != 1, 'R')
df.groupby(['sku_id', g])['order_val'].sum()
结果
sku_id order_counts
A 1 10
R 50
B 1 10
C 1 10
R 20
Name: order_val, dtype: int64
在你 groupby
之前 assign
怎么样?
new_df = (df
.assign(order_counts=lambda x: np.where(x['order_counts'] > 1, 'R', x['order_counts']))
.groupby(['sku_id', 'order_counts'])
.sum()
)
输出:
>>> new_df
order_val
sku_id order_counts
A 1 10
R 50
B 1 10
C 1 10
R 20