Python-Pandas之Dataframe进行groupby之后重命名方法

在正常情况,我们是这样做分组统计的:

dft = train_data.groupby('AdID').agg({'AdDate': ['nunique', 'unique']})

得到的结果是这样的:

列变成多行了,其实有两个方法可以设置:

第一种,是重新命名列名:

最简单直接的方式:

dft.columns = pd.Series(['Count', 'List'])

结果是这样的:

已经改好了,直截了当,但是呢,如果列数比较多就比较麻烦了,你还要一个个对应。

 

第二种,在第一种基础上,利用循环将列名根据需要更改,这样不管多少列,都没问题了:

我们先打印下看看列名是什么格式的:

print(dft.columns)

# 结果是这样的:
# MultiIndex(levels=[['AdDate'], ['nunique', 'unique']],
#          codes=[[0, 0], [0, 1]])


print(dft.columns.values)

# 结果是这样的:
# [('AdDate', 'nunique') ('AdDate', 'unique')]

我们看到dft.columns.values其实里面每个列都是一个元组,我们只需要将元组拼接成字符串,然后替换原来的列名就可以了

dft.columns = ['_'.join(col).strip() for col in dft.columns.values]

得到的结果是这样的:

我们再多弄几列看结果:

dft = train_data.groupby('AdID').agg({'AdDate': ['nunique', 'unique', 'first', 'last']})
dft.columns = ['_'.join(col).strip() for col in dft.columns.values]
print(dft)

舒服~

 

第三种:还有一个方式,是每列单独做,然后拼接,这个其实比较麻烦,这里也记录下,方便使用。而且这个方法还有警告,说是以后会移除掉

dft = train_data.groupby('AdID').AdDate.agg({'Number': 'nunique', 'Values': 'unique'})

得到的结果是这样的:

我把警告也贴出来,就是提示一下。

 

PS:关于重命名列,其实pandas提供了一个专门的方法:rename,可以这样用:

dft = dft.rename({'AdDate_unique': 'List', 'AdDate_nunique': 'Count'}, axis=1)

但是如果是多层的,不能连接两层去重命名,一般情况的重命名可以使用这个。

重命名groupby操作后的dataframe的列名,可以使用以下步骤: 1. 首先,使用groupby函数对dataframe按照'id'列进行分组,并计算出平均时间。 2. 接下来,将groupby操作后的结果转换为一个新的dataframe,并将原来的列名替换为新的列名。可以使用dft.columns属性获取列名,并使用列表推导式将每个列名拼接成字符串,并替换原来的列名。 3. 最后,将'mean'列的列名修改为其他内容,例如将其修改为'mean_colname。可以使用rename函数来实现这个目标。 以下是具体的代码示例: ``` # Step 1: Groupby and compute mean grouped_df = df.groupby('id')['时间'].mean() # Step 2: Rename column names grouped_df = grouped_df.reset_index() # Reset index grouped_df.columns = ['id', 'mean'] # Rename columns # Step 3: Rename 'mean' column grouped_df = grouped_df.rename(columns={'mean': 'mean_colname'}) # Resulting dataframe with renamed columns grouped_df ``` 这样,你就可以得到一个具有'id'和'mean_colname'两列的新dataframe,其中'mean_colname'是对'id'列计算平均时间的结果进行重命名。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python Pandas:如何将DataFrame groupby的结果放在具有新列名的数据框中?](https://blog.csdn.net/weixin_39588252/article/details/110044940)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python-PandasDataframe进行groupby之后重命名方法](https://blog.csdn.net/pz789as/article/details/106059610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值