[英]pandas grouping aggregtation across multiple columns in a dataframe
我想从 pandas dataframe 中得出每年、地区和 weather_type 的最小值和最大值。 dataframe 看起来像这样:
year jan feb mar apr may jun aug sept oct nov dec region weathertype
1862 42.0 8.2 82.7 46.7 72.7 61.6 81.9 45.9 76.8 34.9 44.8 Anglia Rain
1863 58.3 15.7 24.0 17.5 27.9 75.2 38.5 71.5 71.7 77.5 32.0 Anglia Rain
1864 20.5 30.3 81.5 13.8 59.5 26.5 12.3 19.2 42.1 25.5 79.9 Anglia Rain
需要的是两个新列,为每个区域和年份提供最小值和最大值,实现跨行分组,并将结果作为两个新列添加到现有 dataframe 中:
year min max
1862 42.0 81.9
1863 15.7 77.5
1864 12.3 81.5
我的方法是使用此代码:
weather_data['max_value'] = weather_data.groupby(['year','region','weathertype'])['jan','feb','mar','apr','may','jun','jul','aug','sep','oct', 'nov','dec'].transform(np.min)
但是,这会产生数据的非聚合子集,它是现有帧的重复,导致以下错误:
Wrong number of items passed 12, placement implies 1
然后我将 dataframe 融化成一个长格式,而不是宽格式:
year region Option_1 variable value
1862 Anglia Rain jan 42.0
1863 Anglia Rain jan 58.3
1864 Anglia Rain jan 20.5
我用这段代码来产生我需要的东西:
weather_data['min_value'] = weather_data['value'].groupby(weather_data['region','Option_1']).transform(np.min)
但这会在只有一个列表的情况下产生一个关键错误。
[['region','Option_1]]
Grouper for <class 'pandas.core.frame.DataFrame'> not 1-dimensional
任何建议都在这一点上不胜感激。
我会做:
(df.set_index(['year','region','weathertype'])
.assign(min=lambda x: x.min(axis=1),
max=lambda x: x.max(axis=1)
)
.reset_index())
Output:
year region weathertype jan feb mar apr may jun aug sept oct nov dec min max
-- ------ -------- ------------- ----- ----- ----- ----- ----- ----- ----- ------ ----- ----- ----- ----- -----
0 1862 Anglia Rain 42 8.2 82.7 46.7 72.7 61.6 81.9 45.9 76.8 34.9 44.8 8.2 82.7
1 1863 Anglia Rain 58.3 15.7 24 17.5 27.9 75.2 38.5 71.5 71.7 77.5 32 15.7 77.5
2 1864 Anglia Rain 20.5 30.3 81.5 13.8 59.5 26.5 12.3 19.2 42.1 25.5 79.9 12.3 81.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.