python - 为什么此代码会导致 excel 中按字母顺序排列的列列表?
问题描述
table = pd.pivot_table(gains,
index=['Account', 'Date', 'Security'],
values=['Units', 'Proceeds', 'ACB', 'Gain(Loss)'])
# pivot table for gains(losses) broken down by investment account
for account in table.index.get_level_values(0).unique():
# print gains losses sheets one summary for each investment account
temp_df = table.xs(account, level=0)
# column_titles = ['Units', 'Proceeds', 'ACB', 'Gain(Loss)']
# temp_df.reindex(columns=column_titles)
s_name = account + ' - ' + str(idate.year)
temp_df.to_excel(writer, sheet_name=s_name,
columns=['Units', 'Proceeds', 'ACB', 'Gain(Loss)'])
第一个 Excel 表显示了增益数据框的正确列顺序:
即账户日期安全单位收益 ACB 收益(损失)
但是各个 temp.df 数据框创建具有以下列顺序的 excel 表:
即日期证券 ACB 收益(损失)收益单位
请注意,在 Date 和 Security 列之后,即使我的代码中有 columns=[] 参数,这些列也是按字母顺序排列的。这似乎在一段时间内正常工作,然后突然恢复为“Units Proceeds ACB and Gain(Loss)”的字母顺序
任何帮助将非常感激。
编辑:数据框中的顺序是“Account Date Security Units Proceeds ACB Gain(Loss)”,但 to_excel 程序似乎从“Units”开始按字母顺序排列。
Edit2:或者,按我想要的顺序获取这些列的最佳方法是什么。我应该使用 openpyxl、xlrd、xlwt 还是我想要的不是真的可能?
解决方案
我用以下方法解决了这个问题:
s_name = account + ' - ' + str(idate.year)
temp_df = temp_df[['Units', 'Proceeds', 'ACB', 'Gain(Loss)']]
temp_df.to_excel(writer, sheet_name=s_name,
columns=['Units', 'Proceeds', 'ACB', 'Gain(Loss)'])
推荐阅读
- firebase - 将云存储中的数组存储到变量中
- javascript - 如何在显示前更改 x-bind:value - Alpine JS
- rxjs - RxSwift observable 创建,它采用流本身的最后一个值
- mysql - 如何使用 ROLLUP 为 mysql 中的一列创建超级聚合?
- html - 为什么添加边框会使框大小增加 2 px 以上?
- javascript - JQuery没有初始化变量
- android-studio - 在 Android Studio 中展开 Flutter 开发中的文档弹出窗口
- python - 为什么我应该使用方法而不是使用 __init__()?
- sql - 如何从表 A 中获取表 B 上没有任何批准状态的记录
- list - 使用 EnvironmentObject 更新现有列表