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 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 ”和“年份”分组后添加列 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.idxmaxDataFrameGroupBy.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)

关于pandas - 将列添加到日期时间驱动的 Groupby 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59226151/

相关文章:

python - 当我在 pandas 绘图中使用样式时,为什么不应用 colomap?

python - 在 DataFrame 中删除重复项,使行中的空值最少

python - 如何根据列子集中值的存在按行创建 pandas DataFrame 列?

html - 变换时平移 Y 未在中间垂直对齐

javascript - 图像 slider 不稳定

python - 如何计算任何 datetime64 列的第二天分钟差?

datetime - 在 Flutter/Dart 中获取上个月的日期

java - Jersey 解析 Java 8 日期时间

mysql - 如何在 SQL 中将选定的日期列格式化为相对时间格式

javascript - CSS 从中心向后翻译?