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(列表)的。没有遇到它。非常感谢你的帮助。干杯