繁体   English   中英

pandas 在 dataframe 中跨多个列进行分组聚合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM