pandas 透视数据,水平填充 Mult 索引列

问题描述 投票:0回答:1

我有以下代码:

import pandas as pd

data = {
    'name': ['Comp1', 'Comp1', 'Comp2', 'Comp2', 'Comp3'],
    'entity_type': ['type1', 'type1', 'type2', 'type2', 'type3'],
    'code': ['code1', 'code2', 'code3', 'code1', 'code2'],
    'date': ['2024-01-31', '2024-01-31', '2024-01-29', '2024-01-31', '2024-01-29'],
    'value': [10, 10, 100, 10, 200],
    'source': [None, None, 'Estimated', None, 'Reported']
}
df = pd.DataFrame(data)

pivot_df = df.pivot(index='date', columns=['name', 'entity_type', 'source', 'code'], values='value').rename_axis([('name', 'entity_type', 'source', 'date')])
df = pivot_df.reset_index()
df

这会产生以下结果: enter image description here

我遇到以下问题:

  1. 我想删除第一列
  2. 我想水平填充前 3 行。因此,例如,“code2”上方的空白单元格应该是 Comp1、type1、NaN
  3. 用空字符串替换列标题中的那些 nan 会很好

如有任何帮助,我们将不胜感激。

python pandas
1个回答
0
投票

您可以 (1)

reset_index
drop=True
,(2) 将
display.multi_sparse
设置为
False
(使用
pandas.option_context
),以及 (3)
fillna
''

df = pd.DataFrame(data)

out = (df.pivot(index='date', columns=['name', 'entity_type', 'source', 'code'], values='value')
         .rename_axis([('name', 'entity_type', 'source', 'date')])
         .reset_index(drop=True)
         .fillna('')
      )

with pd.option_context('display.multi_sparse', False):
    print(out)

输出:

name        Comp1 Comp1     Comp2 Comp2    Comp3
entity_type type1 type1     type2 type2    type3
source        NaN   NaN Estimated   NaN Reported
code        code1 code2     code3 code1    code2
0                           100.0          200.0
1            10.0  10.0            10.0         
© www.soinside.com 2019 - 2024. All rights reserved.