【问题标题】:Use Groupby of a python pandas dataframe without extending the column names在不扩展列名的情况下使用 python pandas 数据框的 Groupby
【发布时间】:2018-02-26 14:00:58
【问题描述】:

我想使用 pandas groupby 功能,但不影响列名。例如:

我的原始数据框:

df = DataFrame({'int_col' : [1,2,6,8,-1],\
                'float_col' : [0.1, 0.2,0.2,10.1,None], \
                'str_col' : ['a','b',None,'c','a']})

结果:

   float_col  int_col str_col
0        0.1        1       a
1        0.2        2       b
2        0.2        6    None
3       10.1        8       c
4        NaN       -1       a

现在我应用 groupby 函数:

f = {'int_col':['max'],'float_col':['sum']}
df_groupby = df.groupby('str_col', as_index=False,group_keys=False).agg(f)

这导致了新的数据框:

  str_col int_col float_col
              max       sum
0       a       1       0.1
1       b       2       0.2
2       c       8      10.1

在 df_groupby 数据框中,列名获得了新的层次。我想压制这个

谢谢

【问题讨论】:

  • 随便df.groupby('str_col', as_index=False).agg({'int_col':'max','float_col':'sum'})?

标签: python pandas aggregate-functions pandas-groupby


【解决方案1】:

删除字典中的[]

f = {'int_col':'max','float_col':'sum'}
df_groupby = df.groupby('str_col', as_index=False,group_keys=False).agg(f)
print (df_groupby)
  str_col  float_col  int_col
0       a        0.1        1
1       b        0.2        2
2       c       10.1        8

如果要重命名列:

f = {'int_col':'max','float_col':'sum'}
d = {'float_col':'sum','int_col':'max'}
df_groupby = df.groupby('str_col', as_index=False,group_keys=False).agg(f).rename(columns=d)
print (df_groupby)
  str_col   sum  max
0       a   0.1    1
1       b   0.2    2
2       c  10.1    8

【讨论】:

    【解决方案2】:

    我曾经通过以下方式解决类似问题:

    df_groupby.index = df_groupby.index.get_level_values(0)
    df_groupby.columns = df_groupby.columns.map('||'.join)
    

    这应该展平df并合并列名,结果是:

              str_col||  int_col||max  float_col||sum
    0         a             1             0.1
    1         b             2             0.2
    2         c             8            10.1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-18
      • 2011-11-29
      • 1970-01-01
      • 2022-11-17
      • 2019-06-26
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多