【问题标题】:pandas groupby by the dictionary字典中的熊猫 groupby
【发布时间】:2017-07-31 13:57:04
【问题描述】:

我遇到一个问题:

import pandas
df=pandas.DataFrame({"code":['a','a','b','c','d'],
                'data':[3,4,3,6,7],})
mat={'group1':['a','b'],'group2':['a','c'],'group3':{'a','b','c','d'}}

这样的df

  code  data
0   a   3
1   a   4
2   b   3
3   c   6
4   d   7

我想要 group1,group2,group3 的平均值。在此示例中, key:group1 与 value:a,b 匹配,因此我发现 df 中的代码等于 a 或 b。 group1 的平均值为 (3+4+3)/3

group2 -> 'a','c' -> (3+4+6)/3
group3 -> 'a','b','c','d' ->(3+4+3+6+7)/5

我尝试使用 groupby。它不起作用。 谢谢!

【问题讨论】:

    标签: pandas dictionary group-by


    【解决方案1】:

    IIUC 你可以这样做:

    In [133]: rules = {
         ...:   'grp1': ['a','b'],
         ...:   'grp2': ['a','c'],
         ...:   'grp3': list('abcd')
         ...: }
         ...:
         ...: r = pd.DataFrame(
         ...:     [{r:df.loc[df.code.isin(rules[r]), 'data'].mean()}
         ...:      for r in rules
         ...:     ]
         ...: ).stack()
         ...:
    
    In [134]: r
    Out[134]:
    0  grp1    3.333333
    1  grp2    4.333333
    2  grp3    4.600000
    dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 1970-01-01
      • 2022-07-05
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多