如何使用Pandas实现列转行及分组数据行转列?
Pandas列转行与分组后行转列操作
1. 如何使用Pandas将列转换为行?
Pandas中实现列转行(宽表转长表)最常用的是melt()函数,它能将指定列转换为行记录。示例如下:
假设初始宽表数据:
import pandas as pd df = pd.DataFrame({ 'Agent': ['Abi', 'Bob'], '26': [4.5, 4.2], '27': [5, 4.8] })
执行列转行操作:
# id_vars:保留不转换的列;var_name:转换后原列名对应的新列名;value_name:原列值对应的新列名 melted_df = df.melt(id_vars='Agent', var_name='order_date_week', value_name='Average_Rating_Per_Week')
转换后结果:
Agent order_date_week Average_Rating_Per_Week 0 Abi 26 4.5 1 Bob 26 4.2 2 Abi 27 5.0 3 Bob 27 4.8
2. 分组后的数据行转列操作
针对你提供的以Agent和order_date_week为MultiIndex的分组数据,使用unstack()方法即可快速实现行转列(长表转宽表),步骤如下:
输入数据(MultiIndex格式):
# 模拟输入数据 data = [ ('Abi', 26, 4.5), ('Abi', 27, 5), ('Abi', 28, 3.8), ('Abi', 29, 4.0), ('Abi', 30, 3.9) ] grouped_df = pd.DataFrame(data, columns=['Agent', 'order_date_week', 'Average_Rating_Per_Week']) grouped_df = grouped_df.set_index(['Agent', 'order_date_week'])
执行行转列操作:
# 将order_date_week索引层级转换为列 result_df = grouped_df.unstack(level='order_date_week') # 移除多层列名的顶层(原列名Average_Rating_Per_Week) result_df.columns = result_df.columns.droplevel(0) # 将Agent从索引转为普通列(可选,根据需求调整) result_df = result_df.reset_index()
最终输出:
Agent 26 27 28 29 30 0 Abi 4.5 5.0 3.8 4.0 3.9
该方法可直接覆盖60个Agent的批量处理,无需额外循环。
内容的提问来源于stack exchange,提问作者NarenCR
相关产品推荐
相关产品推荐

