Python使用分组计算ala dplyr对groupby和新列进行修改

Python使用分组计算ala dplyr对groupby和新列进行修改,python,r,pandas,dplyr,Python,R,Pandas,Dplyr,我非常熟悉用于数据分析的R dplyr,我正在尝试将我用dplyr编写的一些代码转换为pandas。我的数据中有一个人的ID列和该人使用某种产品的日期。我试图找出将下面的R dplyr代码转换为python代码的最佳方法。基本上,我按ID列进行分组,筛选特定类型的产品,然后添加一列(对于组中的每一行)为该人员和产品添加最小(首次使用)日期和最大(上次使用)日期。最后,我还添加了一列,用于计算上次使用和首次使用日期之间的天数。以下是数据: ID PRODUCT DATE A ITEM1

我非常熟悉用于数据分析的R dplyr,我正在尝试将我用dplyr编写的一些代码转换为pandas。我的数据中有一个人的ID列和该人使用某种产品的日期。我试图找出将下面的R dplyr代码转换为python代码的最佳方法。基本上,我按ID列进行分组,筛选特定类型的产品,然后添加一列(对于组中的每一行)为该人员和产品添加最小(首次使用)日期和最大(上次使用)日期。最后,我还添加了一列,用于计算上次使用和首次使用日期之间的天数。以下是数据:

ID  PRODUCT DATE
A   ITEM1   1/30/15
B   ITEM1   2/23/14
A   ITEM2   3/22/15
C   ITEM1   1/23/12
B   ITEM1   4/12/15
A   ITEM3   2/2/14
C   ITEM1   1/1/17
A   ITEM1   2/20/15
A   ITEM1   5/18/15
使用dplyr我可以做到

library(dplyr)
library(lubridate)

df <- df %>% 
mutate(DATE = mdy(DATE)) %>% 
group_by(ID) %>% 
filter(PRODUCT == "Item1") %>% 
mutate(FIRST = min(DATE), LAST = max(DATE), DAYS = LAST - FIRST)
数据:


df使用
agg
+
groupby

funcs = dict(FIRST='min', LAST='max', DAYS=np.ptp)
d1 = df.join(df.groupby(['ID', 'PRODUCT']).DATE.agg(funcs), on=['ID', 'PRODUCT'])

转换函数如何?@Wen转换函数如何?@Pirsquare类似于df['SUM']=df.groupby('A')['B'].transform(SUM),但我不知道这个函数是否可以在一次添加多个结果。
df <- structure(list(ID = structure(c(1L, 2L, 1L, 3L, 2L, 1L, 3L, 1L, 1L), .Label = c("A", "B", "C"), class = "factor"), 
               PRODUCT = structure(c(1L, 1L, 2L, 1L, 1L, 3L, 1L, 1L, 1L), .Label = c("ITEM1", "ITEM2", "ITEM3"), class = "factor"), 
               DATE = structure(c(3L, 6L, 7L, 2L, 8L, 4L, 1L, 5L, 9L), 
                                .Label = c("1/1/17", "1/23/12", "1/30/15", "2/2/14", "2/20/15", "2/23/14", "3/22/15", "4/12/15", "5/18/15"), 
                                class = "factor")), 
               .Names = c("ID", "PRODUCT", "DATE"), class = "data.frame", row.names = c(NA, -9L))
funcs = dict(FIRST='min', LAST='max', DAYS=np.ptp)
d1 = df.join(df.groupby(['ID', 'PRODUCT']).DATE.agg(funcs), on=['ID', 'PRODUCT'])