我正在使用基于多个 pandas 数据框的报告实验室创建一份 pdf 报告。
pdf 中显示的表格需要按特定顺序排列列。
这是一个示例数据框:
df = pd.DataFrame({
'Counterparty': ['foo', 'fizz', 'fizz', 'fizz','fizz', 'foo'],
'Commodity': ['bar', 'bar', 'bar', 'bar','bar', 'ab cred'],
'DealType': ['Buy', 'Buy', 'Buy', 'Buy', 'Buy', 'Buy'],
'StartDate': ['07/01/2024', '09/01/2024', '10/01/2024', '11/01/2024', '12/01/2024', '01/01/2025'],
'FloatPrice': [18.73, 17.12, 17.76, 18.72, 19.47, 20.26],
'MTMValue':[10, 10, 10, 10, 10, 10]
})
out = pd.pivot_table(df, values = 'MTMValue', index='Counterparty', columns = 'Commodity', aggfunc='sum').reset_index().rename_axis(None, axis=1).fillna(0)
out['Cumulative Exposure'] = out[out.columns[1:]].sum(axis = 1)
Counterparty ab cred bar Cumulative Exposure
0 fizz 0.0 40.0 40.0
1 foo 10.0 10.0 20.0
我需要这个:
Counterparty bar ab cred Cumulative Exposure
0 fizz 40.0 0.0 40.0
1 foo 10.0 10.0 20.0
其中ab cred
总是位于cumulative exposure
最后一个 之前和之后commodity
,因为可以x
向数据中添加一定数量的商品(总是包含在商品中)。 之后还可以随时ab cred
添加更多列。cumulative exposure
一个简单的选择就是
pop
重新插入,ab cred
以便它最后出现:另一个选择是
sort_index
使用自定义键:当然,如果您知道所需的明确顺序,您可以随时重新索引(同时请注意,您可以避免
fillna
稍后分配该Cumulative Exposure
列):输出:
您还可以尝试使用
groupby
、sum
和unstack
来产生与数据透视表相同的效果。不确定哪个更快。要设置特定顺序,您可以按所需顺序指定列。以下是简短的一行代码:
出去: