【问题标题】:Modify slice of multiindex with series用系列修改多索引切片
【发布时间】:2021-06-02 20:24:01
【问题描述】:

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

我想:

  1. 从多(列)索引中获取系列
  2. 使用数学运算符或 .apply() 函数对其进行修改
  3. 将其返回到数据框。

我可以执行 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


【解决方案1】:

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

idx = pd.IndexSlice  # for multi-index slicing

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

【讨论】:

  • 非常感谢。我稍后会测试它。
猜你喜欢
  • 2020-01-24
  • 1970-01-01
  • 2021-12-31
  • 2021-12-18
  • 2018-11-21
  • 2015-03-28
  • 2021-08-25
  • 2015-03-16
  • 2018-10-31
相关资源
最近更新 更多