【问题标题】:Applying new row within second level index在二级索引中应用新行
【发布时间】:2019-03-10 14:34:09
【问题描述】:

我有一个看起来像这样的数据框:

+-----------+---------+-------+-------+-------+
|           |         | Day 1 | Day 2 | Day 3 |
+-----------+---------+-------+-------+-------+
| Product 1 | Revenue |     0 |     0 |     0 |
|           | Cost    |     0 |     0 |     0 |
| Product 2 | Revenue |     0 |     0 |     0 |
|           | Cost    |     0 |     0 |     0 |
| Product 3 | Revenue |     0 |     0 |     0 |
|           | Cost    |     0 |     0 |     0 |
+-----------+---------+-------+-------+-------+

本质上是垂直的两级索引。第一层是产品,第二层是收入或成本。

我想在收入和成本下的所有产品中添加一个利润行(即收入 - 成本)。甚至是该产品的平均收入等。但是,经过大量的应用实验后,我似乎无法让它与多层次一起使用。

Product 1 Revenue    0
          Cost       0
          Profit     0

如何做到这一点?

【问题讨论】:

标签: python pandas numpy pandas-groupby pandas-apply


【解决方案1】:

这确实取决于您要执行此操作的次数以及当前其他值的存储方式。

如果您只想为上述各项添加少量利润,您可以使用this method。但是,此方法使用 ix 将被弃用(我相信)。因此,我建议使用at

df = pd.DataFrame({('A', 'b'): [1, 2, 3], ('A', 'a'): [7, 2, 9]}).T
df.at[('B', 'a'), :] = [1, 4, 5]

Out[1]:     
                0    1   2
         A  b   1    2   3
            a   7    2   9
         B  a   1    4   5

如果您的利润信息存储在另一个 DataFrame 中,使用concat 是最简单的,就像这样,

df = pd.DataFrame({('A', 'b'): [1, 2, 3], ('A', 'a'): [7, 2, 9]}).T
df2 = pd.DataFrame({('B', 'a'): [1, 4, 5]}).T

pd.concat([df, df2])

Out[1]: 
        0   1   2
A   b   1   2   3
    a   7   2   9
B   a   1   4   5

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2012-07-10
    相关资源
    最近更新 更多