在group by之后重命名列,并在pandas数据帧中求和

时间:2017-06-07 15:01:25

标签: pandas

这是我的命令组:

pdf_chart_data1 = pdf_chart_data.groupby('sell').value.agg(['sum']).rename(
    columns={'sum':'valuesum','sell' : 'selltime'}
)

我可以更改列名称的值,但不能更改' sell'。 请帮助解决此问题。

3 个答案:

答案 0 :(得分:13)

您无法重命名,因为它是index。您可以为返回as_index=False添加DataFrame或添加reset_index

pdf_chart_data1=pdf_chart_data.groupby('sell', as_index=False)['value'].sum()
                              .rename(columns={'sum':'valuesum','sell' : 'selltime'})

或者:

pdf_chart_data1=pdf_chart_data.groupby('sell')['value'].sum()
                          .reset_index()
                          .rename(columns={'sum':'valuesum','sell' : 'selltime'})

答案 1 :(得分:1)

df = df.groupby('col1')['col1'].count()
df1= df.to_frame().rename(columns={'col1':'new_name'}).reset_index()

答案 2 :(得分:0)

如果您使用相同的索引加入 groupby,其中一个是 nunique -> 唯一项目的数量,一个是唯一项目 -> 唯一项目列表,那么您将获得两列名为 Sport 的列。使用 as_index=False 我能够使用 rename 重命名第二个运动名称,然后将两个列表连接在一起并按运动降序排序并显示 10 个 5 运动计数。

 grouped=df.groupby('NOC', as_index=False)
 Nsport=grouped['Sport'].nunique()\
     .rename(columns={'Sport':'SportCount'})
 Nsport=Nsport.set_index('NOC')

 country_grouped=df.groupby('NOC')
 Nsport2=country_grouped['Sport'].unique()

 df2=pd.concat([Nsport,Nsport2],  join='inner',axis=1).reindex(Nsport.index)
df2=df2.sort_values(by=["SportCount"],ascending=False)


print(df2.columns)
for key,item in df2.head(5).iterrows():
   print(key,item)