用缺失的月份列填充 pandas 数据透视表并添加月份列标题

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

我正在旋转一个数据框以将其变成长格式。数据按月和年显示。但并非所有月份都存在。

  1. 如何添加缺失月份的列并用零填充?
  2. 如何将前两列标识符(年和月)合并为该月的一个日期标识符?

可执行代码如下。

import pandas as pd
import numpy as np

df = pd.DataFrame({
        'Year':[2022,2022,2023,2023,2024,2024],
        'Month':[1,12,11,12,1,1],
        'Code':[None,'John Johnson',np.nan,'John Smith','Mary Williams','ted bundy'],
        'Unit Price':[np.nan,200,None,56,75,65],
        'Quantity':[1500, 140000, 1400000, 455, 648, 759],
        'Amount':[100, 10000, 100000, 5, 48, 59],
        'Invoice':['soccer','basketball','baseball','football','baseball','ice hockey'],
        'energy':[100.,100,100,54,98,3],
        'Category':['alpha','bravo','kappa','alpha','bravo','bravo']
})

index_to_use = ['Category','Code','Invoice','Unit Price']
values_to_use = ['Amount','Quantity']
columns_to_use = ['Year','Month']

df2 = df.pivot_table(index=index_to_use,
                            values=values_to_use,
                            columns=columns_to_use)

该解决方案应该能够识别数据中的年份,并添加零或纳米缺失月份的列。例如,在上面的数据中,我们有 3 年,2022 年、2023 年和 2024 年,但我们只有 2022 年和 2023 年 12 月以及 2024 年 1 月的数据。输出数据帧应该包含 2022 年、2023 年和 2024 年所有三年的 1 月到 12 月,原始数据帧没有数据的那些单元格中为零或 nan?

python pandas dataframe pivot-table multi-index
1个回答
0
投票

代码

date = pd.to_datetime(df2.columns.droplevel(0).to_frame().assign(Day=1))
dr = pd.date_range(date.min(), date.max(), freq='MS')
tuples = [(i,) + t for i in values_to_use for t in zip(dr.year, dr.month)]
idx = pd.MultiIndex.from_tuples(tuples)
out = df2.reindex(idx, axis=1, fill_value=0)

输出:

© www.soinside.com 2019 - 2024. All rights reserved.