【发布时间】:2021-06-02 20:24:01
【问题描述】:
我有一个问题,我在一天中的大部分时间里都在试图解决这个问题,但到目前为止都是徒劳的。
我想:
- 从多(列)索引中获取系列
- 使用数学运算符或 .apply() 函数对其进行修改
- 将其返回到数据框。
我可以执行 1 和 2,但由于某种原因,我无法将其正确返回到数据框。我也很乐意从该系列中构建一个新的数据框。至此,我愿意做很多事情来解决它。
示例数据如下所示:
| Foo | Bar | Baz | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| day | night | day | night | day | night | |||||||||||||||||||
| a | a | b | b | a | a | b | b | a | a | b | b | a | a | b | b | a | a | b | b | a | a | b | b | |
| 12 | 5 | 33 | 50 | 12 | 5 | 33 | 50 | 12 | 5 | 33 | 50 | 12 | 5 | 33 | 50 | 12 | 5 | 33 | 50 | 12 | 5 | 33 | 50 | |
| id | ||||||||||||||||||||||||
| 1 | 0 | 2 | 1 | 0 | 12 | 0 | 18 | 0 | 9 | 0 | 3 | 0 | 2 | 0 | 0 | 0 | 0 | 15 | 0 | 0 | 3 | 0 | 0 | 0 |
| 2 | 1 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 7 | 0 | 0 | 2 | 0 | 11 | 1 | 19 | 0 | 0 | 0 | 6 | 1 | 0 |
| 3 | 0 | 0 | 0 | 3 | 20 | 1 | 0 | 14 | 0 | 3 | 2 | 0 | 3 | 0 | 0 | 0 | 1 | 0 | 0 | 16 | 0 | 1 | 6 | 0 |
| 4 | 0 | 3 | 2 | 0 | 0 | 10 | 0 | 0 | 0 | 2 | 0 | 12 | 0 | 0 | 20 | 4 | 5 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 5 | 16 | 0 | 0 | 0 | 7 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 18 | 1 | 0 | 0 | 0 | 0 | 5 | 0 | 5 | 13 | 0 | 0 |
| 6 | 0 | 0 | 10 | 6 | 1 | 0 | 9 | 13 | 0 | 3 | 8 | 0 | 4 | 8 | 0 | 0 | 11 | 14 | 0 | 0 | 21 | 0 | 0 | 0 |
| 7 | 7 | 0 | 0 | 0 | 0 | 19 | 0 | 0 | 1 | 17 | 0 | 0 | 0 | 0 | 22 | 0 | 2 | 0 | 0 | 0 | 0 | 2 | 0 | 17 |
我可以通过以下方式获取数据:
in:
df.loc[2].loc['Foo','day']
out:
a 12 1
5 4
b 33 0
50 0
现在我想做一些类似的事情:
df.loc[2].loc['Foo','day'] == df.loc[2].loc['Foo','day'] * (60*24)
并使用新数据更新数据框。就是后面做迭代编辑。但由于某种原因,我的数据框没有任何改变。我尝试过以我能想到的所有不同方式对其进行切片和更新。
我在这里尝试了 jezrael 对 jaydeepsb 的回答中的代码:Pandas update values in a multi-index dataframe 这让我很难用一个值更新一个切片,但到目前为止,用一个系列更新一个切片让我望而却步。
如果有人可以帮助我,我非常感谢你。也因为没有让我沮丧地将我的电脑扔出窗外:D
【问题讨论】:
-
请分享源数据框的源代码 ->
df.to_dict()可能
标签: python pandas dataframe multi-level