在不扩展列名的情况下使用 python pandas 数据框的 Groupby

Use Groupby of a python pandas dataframe without extending the column names

我想使用 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 数据框中,列名获得了一个新的级别。我想抑制这个

谢谢

在字典中删除 []:

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

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

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