在不扩展列名的情况下使用 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
我想使用 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