用系列修改多索引的切片

Modify slice of multiindex with series

我有一个问题,一天中的大部分时间我都在努力解决这个问题,但到目前为止是徒劳的。

我想:

  1. 从多(列)索引中提取一个序列
  2. 用数学运算符或 .apply() 函数修改它
  3. return 它到数据框。

我可以执行 1 和 2,但由于某些原因我无法将其正确 return 到数据帧。我也很乐意根据该系列构建一个新的数据框。至此,我愿意做很多事情来解决它。

示例数据如下所示:

小节 巴兹
晚上 晚上 晚上
一个 一个 b b 一个 一个 b b 一个 一个 b b 一个 一个 b b 一个 一个 b b 一个 一个 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 这让我不得不用一个值来更新一个切片,但到目前为止,我还无法用一个系列来更新一个切片。

如果有人能帮助我,我非常感谢你。也因为没有让我沮丧地把我的电脑扔出 window :D

(1) 找到数据框的子集,(2) 应用您的操作,(3) 更新您的数据框:

idx = pd.IndexSlice  # for multi-index slicing

df.update(df.loc[[2], idx["Foo", "day", :, :]] * (60*24))