Pandas DataFrame透视无效:从Tableau导入数据后透视无变化
Pandas透视操作后DataFrame未更新的问题解决
问题背景
从Tableau工作表导出的数据已导入Pandas的view_data_df,需要将长表数据透视为宽表格式(把Measure Names的不同取值转为列),但执行透视代码后,原DataFrame完全没有变化。
原始数据结构及内容:
| C Week | Measure Names | NT Login | Site | Measure Values | |
|---|---|---|---|---|---|
| 0 | 202306 | Calls AHT | 1daa04 | Derby Sell | 0 |
| 1 | 202306 | All Calls | 1daa04 | Derby Sell | 972 |
| 2 | 202306 | Core Calls | 1daa04 | Derby Sell | 972 |
| 3 | 202306 | Glass Calls | 1daa04 | Derby Sell | 0 |
| 4 | 202306 | Outbound Calls | 1daa04 | Derby Sell | 9 |
执行的无效代码:
view_data_df.pivot_table(values = 'Measure Values', index=['C Week','NT Login','Site'], columns = 'Measure Names', aggfunc=sum).reset_index() print(view_data_df)
问题原因
pivot_table方法是非原地操作,它不会直接修改原DataFrame,而是返回一个全新的透视后的DataFrame。如果没有将这个返回值赋值给变量,操作结果就会被丢弃,原DataFrame自然保持不变。
修正代码
将透视结果赋值给原变量或新变量,同时处理透视后的列名层级问题:
# 执行透视并将结果赋值回原DataFrame view_data_df = view_data_df.pivot_table( values='Measure Values', index=['C Week', 'NT Login', 'Site'], columns='Measure Names', aggfunc=sum ).reset_index() # 移除列名的层级结构 view_data_df.columns = view_data_df.columns.droplevel(0) # 重新设置列名(可选,根据需求调整顺序) view_data_df.columns = ['C Week', 'NT Login', 'Site', 'All Calls', 'Calls AHT', 'Core Calls', 'Glass Calls', 'Outbound Calls'] # 重置索引 view_data_df.reset_index(drop=True, inplace=True) print(view_data_df)
效果说明
执行修正后的代码后,view_data_df会变成期望的宽表格式:C Week、NT Login、Site作为标识列,各类Measure Names作为独立数值列,对应填充Measure Values的求和结果。
内容的提问来源于stack exchange,提问作者Tazbazuk
相关产品推荐
相关产品推荐

