gpt4 book ai didi

python - pandas 使用多索引进行条件更新

转载 作者:行者123 更新时间:2023-12-01 09:27:03 24 4
gpt4 key购买 nike

假设我有以下 DataFrame,在索引和列上都有多个索引。

 first   x    y
second m n
A B
A0 B0 0 0
B1 0 0
A1 B0 0 0
B1 0 0

我正在尝试根据条件更新值。条件将类似于:`规则:

[{condition:{'A':'A0,'B':'B0'},value:5},
{condition:{'B':'B1'},value:3},
.....]

我正在尝试寻找具有类似功能的东西

  • 使用pandas.DataFrame.xs设置值:

    for each rule in rules:
    df.xs((conditions.values), level=[conditions.keys]) = value
  • 将多个级别传递给 pandas.Index.get_level_values 以设置值:

    for each rule in rules:
    df.loc[df.index.get_level_values(conditions.keys) == [conditions.values] = value

结果应该是

 first   x    y
second m n
A B
A0 B0 5 5
B1 3 3
A1 B0 0 0
B1 3 3`

最佳答案

不幸的是,pandas 的 MultiIndex 中的字典的选择尚未 not supported ,所以需要定制function适合您:

rules = [{'condition':{'A':'A0','B':'B0'},'value':5},
{'condition':{'B':'B1'},'value':3}]

for rule in rules:
d = rule['condition']
indexer = [d[name] if name in d else slice(None) for name in df.index.names]
df.loc[tuple(indexer),] = rule['value']

print (df)
first x y
second m n
A B
A0 B0 5 5
B1 3 3
A1 B0 0 0
B1 3 3

关于python - pandas 使用多索引进行条件更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50303572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com