按年份和 return 日期查找最大值,最大值出现在 Pandas 中,日期为索引
Find max by year and return date on which max occurred in Pandas with dates as index
我有这个数据框
date,AA
1980-01-01, 77.7
1980-01-02, 86
1980-01-03, 92.3
1980-01-04, 96.4
1980-01-05, 85.7
1980-01-06, 75.7
1980-01-07, 86.8
1980-01-08, 93.2
1985-08-13, 224.6
1985-08-14, 213.9
1985-08-15, 205.7
1985-08-16, 207.3
1985-08-17, 202.1
我想计算每年的最大值及其发生的日期。我很挣扎,因为我确实想保留日期作为索引。
确实我是这样读的:
dfr = pd.read_csv(fnamed, sep=',', header = 0, index_col=0, parse_dates=True)
我知道我可以重新采样为
dfr_D = dfr.resample('Y').max()
但在这种情况下,我会丢失有关一年内最大值位置的信息。
我找到了这个:
idx = dfr.groupby(lambda x: dfr['date'][x].year)["A"].idxmax()
但是,dfr['date'] 似乎是列的名称,而在我的例子中,索引中的日期和“.year”不是其属性之一。
我觉得我应该使用“groupby”和“indexmax”。然而,我做的所有attends,都失败了。
提前致谢
假设“date”是 datetime 类型和一列,您可以使用以下方法以每组最大值对数据进行切片:
df.loc[df.groupby(df['date'].dt.year)['AA'].idxmax().values]
输出:
date AA
3 1980-01-04 96.4
8 1985-08-13 224.6
如果“日期”是索引:
df.loc[df.groupby(df.index.year)['AA'].idxmax().values]
输出:
AA
date
1980-01-04 96.4
1985-08-13 224.6
我有这个数据框
date,AA
1980-01-01, 77.7
1980-01-02, 86
1980-01-03, 92.3
1980-01-04, 96.4
1980-01-05, 85.7
1980-01-06, 75.7
1980-01-07, 86.8
1980-01-08, 93.2
1985-08-13, 224.6
1985-08-14, 213.9
1985-08-15, 205.7
1985-08-16, 207.3
1985-08-17, 202.1
我想计算每年的最大值及其发生的日期。我很挣扎,因为我确实想保留日期作为索引。
确实我是这样读的:
dfr = pd.read_csv(fnamed, sep=',', header = 0, index_col=0, parse_dates=True)
我知道我可以重新采样为
dfr_D = dfr.resample('Y').max()
但在这种情况下,我会丢失有关一年内最大值位置的信息。
我找到了这个:
idx = dfr.groupby(lambda x: dfr['date'][x].year)["A"].idxmax()
但是,dfr['date'] 似乎是列的名称,而在我的例子中,索引中的日期和“.year”不是其属性之一。
我觉得我应该使用“groupby”和“indexmax”。然而,我做的所有attends,都失败了。
提前致谢
假设“date”是 datetime 类型和一列,您可以使用以下方法以每组最大值对数据进行切片:
df.loc[df.groupby(df['date'].dt.year)['AA'].idxmax().values]
输出:
date AA
3 1980-01-04 96.4
8 1985-08-13 224.6
如果“日期”是索引:
df.loc[df.groupby(df.index.year)['AA'].idxmax().values]
输出:
AA
date
1980-01-04 96.4
1985-08-13 224.6