将pandas数据框更改为从pandas中的数据框添加一年中每个月的最大列>最大值。我该怎么做?

2024-09-28 22:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个数据框架结构,看起来像(日期、值、月、年)<;-从数据框中提取月份和年份。 我想在另一列“max”中获得一年中每个月的“value”列的最大值。有多个“日期”属于同一个“月”和“年”。 比如说,

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  |

Tags: 数据lt信息datevalueyearmax年份
3条回答

试试这个

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

使用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

我假设Date列属于datetime类型

使用:

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

我故意将列名更改为Max(从大写字母开始) 为了不“覆盖”现有的功能

相关问题 更多 >