Pandas多索引条件更新

2024-04-20 08:51:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我在索引和列上都有多个索引的以下数据帧。

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

我试图用条件。那个条件如下: `规则:

^{pr2}$

我想找一些功能与

  • 使用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`

Tags: pandasdffora1b0条件a0level
1条回答
网友
1楼 · 发布于 2024-04-20 08:51:29

不幸的是,pandas中MultiIndex中的dictionary的选择仍然是{a1},因此需要为您定制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

相关问题 更多 >