更改熊猫数据框,以从熊猫数据框中添加每年的最大值列->最大值我怎样才能做到这一点?

问题描述

所以我有一个数据框结构,看起来像(日期,值,月,年)

Date       |value | month | year |
2013-01-03 | 13   | 01    | 2013 |
2013-01-06 | 14   | 01    | 2013 |
2014-01-03 | 16   | 01    | 2014 |
2011-01-03 | 15   | 01    | 2011 |

应该给出类似的内容

Date       |value | month | year | max |
2013-01-03 | 13   | 01    | 2013 | 14  |
2013-01-06 | 14   | 01    | 2013 | 14  |
2014-01-03 | 16   | 01    | 2014 | 16  |
2011-01-03 | 15   | 01    | 2011 | 15  |

解决方法

使用pd.Grouper按月份和transform分组:

df["Date"] = pd.to_datetime(df["Date"])
df["max"] = df.groupby(pd.Grouper(key="Date",freq="M"))["value"].transform("max")

# or df.groupby(df["Date"].str[:8])["value"].transform("max")
 
print (df)

        Date  value  month  year  max
0 2013-01-03     13      1  2013   14
1 2013-01-06     14      1  2013   14
2 2014-01-03     16      1  2014   16
3 2011-01-03     15      1  2011   15
,

尝试

df['max'] = df.apply(lambda r: df[(df.month==r['month']) & (df.year==r['year'])]['value'].max(),axis=1)
,

我认为 Date 列是 datetime 类型。

使用:

df['Max'] = df.groupby(pd.Grouper(key='Date',freq='M')).value.transform(max)

我故意将列名称更改为 Max (以大写 M 开头) 为了不“覆盖”现有的 Pandas 功能。