python - 在二级索引中应用新行
问题描述
我有一个看起来像这样的数据框:
+-----------+---------+-------+-------+-------+
| | | 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
这怎么可能实现?
解决方案
它确实取决于您想要执行此操作的次数以及当前其他值的存储方式。
如果您希望只为上述每一项添加少量利润,您可以使用此方法。但是,这种方法使用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
推荐阅读
- python - Python新手,我的代码有什么问题?如何让游戏存储金币值,并开始新的迭代直到用户退出?
- python - 如何在特定驱动器的所有子目录中创建文件?
- android - 从一个活动到另一个活动并回到上一个活动后如何保留价值?
- java - Maven:编译时将可执行文件(.exe)移动到目标文件夹中
- java - 如何让 itemWriter 创建文件?
- visual-studio-extensions - VSIX - 如何在包中包含 XML 文档文件?
- python - 根据第一个列表的最大顺序对多个列表进行排序
- dart - 小部件路由到/离开时的类回调函数
- css - 如何访问动态嵌套结构中最后一个元素的样式属性?
- spring-cache - Spring缓存动态设置过期时间 - 咖啡因