Pandas 将列添加到datettime驱动的Groupby函数

Pandas 将列添加到datettime驱动的Groupby函数,pandas,datetime,transform,pandas-groupby,Pandas,Datetime,Transform,Pandas Groupby,我有一个数据帧 index UoW Category Description Date Channel Trans ADATE 2018-12-31 1603 Pay Infringement 31/12/2018 AustPost 209 2018-12-31 1604 Pay Infringement 31/12/2018 AustPost 14 2019-12-31 1605 Pay

我有一个数据帧

index   UoW Category Description    Date    Channel Trans
ADATE                   
2018-12-31  1603    Pay Infringement    31/12/2018  AustPost    209
2018-12-31  1604    Pay Infringement    31/12/2018  AustPost    14
2019-12-31  1605    Pay Infringement    31/12/2018  CSC         234
2019-12-31  1606    Pay Infringement    31/12/2018  CSC         1
2019-12-31  1607    Pay Infringement    31/12/2018  DTMR Other  1
2018-12-31  1608    Pay Infringement    31/12/2018  Internet    496
2018-12-30  1609    Pay Infringement    30/12/2018  CSC         266
我想在按“通道”和“年份”分组后添加列
df['MonthofYear']

下面给出了所需的结果,无需额外列

df['Trans'].groupby([df['Channel'],  df.index.year]).agg(['max', 'min'])
我试过:

 df['MonthofYear']=df['Trans'].groupby([df['Channel'],  df.index.year]).agg(['max', 'min']).transform(df.index.month)
非常感谢您的帮助

使用和 对于按
Trans
列的最大值和最小值从索引中提取的日期时间,然后将值转换为月份:

tup = [('MaxVal','max'),
       ('MinVal', 'min'), 
       ('MonthofYearMin', 'idxmin'),
       ('MonthofYearMax', 'idxmax')]
df1 = df.groupby(['Channel',  df.index.year.rename('year')])['Trans'].agg(tup)

df1['MonthofYearMax'] = df1['MonthofYearMax'].dt.month
df1['MonthofYearMin'] = df1['MonthofYearMin'].dt.month
print (df1)

您可以添加预期的输出吗?是否要在同一组的所有行中复制分组值?理想情况下,我需要返回的是agg函数返回的值的相应df.index.month。dataframe有12000000多行。我需要找到每个频道每年的最大值和最小值。df['Trans'].groupby([df['Channel'],df.index.year]).agg(['max','min'])实现了这一点。不过,我想要的是确定最大值和最小值是从哪个月派生的。是的,需要最小值、最大值和月份列,该列应包含任一值产生的月份。感谢@jezrael,这将返回整个数据帧,而不是通道、年、最大值、最小值和月份的细分。我希望得到更多的叠加结果。@wwnde-答案已编辑。朋友的建议,建议要认真对待。这个解决方案很有效。你需要做更多的阅读来理解你是如何利用tup(列表)的。没有遇到它。非常感谢你的帮助。干杯