Pandas:重构数据帧

2024-09-28 23:34:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下pandas数据帧和基线值:

df = pd.DataFrame(data=[
    {'yr': 2010, 'month': 0, 'name': 'Johnny', 'total': 50},,
    {'yr': 2010, 'month': 0, 'name': 'Johnny', 'total': 50},
    {'yr': 2010, 'month': 1, 'name': 'Johnny', 'total': 105},
    {'yr': 2010, 'month': 0, 'name': 'Zack', 'total': 90}
])
baseline_value = 100

我正在根据年份、月份和名称对数据进行分组和聚合。然后计算相对于基线值的净和:

^{pr2}$

如何重新构造此数据帧,使输出看起来像这样:

                             value
yr    month   name    type
2010  0       Johnny  Total    100
                      Net        0
              Zack    Total     90
                      Net      -10
      1       Johnny  Total    105
                      Net        5

Tags: 数据namedataframepandasdfnetvaluetotal
1条回答
网友
1楼 · 发布于 2024-09-28 23:34:35

Option 1: Reshaping yout pivot dataframe: pt

使用stackrename和{}:

pt.stack().rename('value').to_frame()

输出:

^{pr2}$

Option 2 using set_index and sum from original df

这是另一种从源数据源开始的方法,使用set_index和{}和{}参数,然后用stack重塑形状:

baseline_value = 100
(df.set_index(['yr','month','name'])
  .sum(level=[0,1,2])
  .eval('net = @baseline_value - total',inplace=False)
  .stack()
  .to_frame(name='value'))

输出:

^{4}$

相关问题 更多 >