将列添加到日期时间驱动的 Groupby 函数
Add Column to datettime driven Groupby function
我有一个数据框;
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
我想在按 'Channel' 和 'Year' 分组后添加列 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)
非常感谢帮助
使用DataFrameGroupBy.idxmax
和
DataFrameGroupBy.idxmin
根据 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)
我有一个数据框;
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
我想在按 'Channel' 和 'Year' 分组后添加列 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)
非常感谢帮助
使用DataFrameGroupBy.idxmax
和
DataFrameGroupBy.idxmin
根据 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)