将多索引数据帧的子集除以字典中的值

时间:2018-10-18 06:58:06

标签: python pandas dictionary dataframe multi-index

我有多索引DataFrame和一个字典。当字典键的核心索引为0级索引时,我需要用字典中的数字除以DF中的所有数值。这是我的代码-我得到的只是NaN值。感谢帮助。

import pandas as pd

data = {
    "ix0" : ["a", "a", "b", "b"], 
    "ix1" : ["a", "b", "a", "b"], 
    "col1" : [0, 1, 2, 3],
    "col2" : [3, 2, 1, 0]
}

dict = {
    "a" : 10,
    "b" : 100 
}

df = pd.DataFrame(data).set_index(["ix0", "ix1"])

print(df, "\n")

for letter in dict.keys():
    df.loc[letter] = df.loc[letter].divide(dict[letter])

print(df)

输出:

         col1  col2
ix0 ix1            
a   a       0     3
    b       1     2
b   a       2     1
    b       3     0 

         col1  col2
ix0 ix1            
a   a     NaN   NaN
    b     NaN   NaN
b   a     NaN   NaN
    b     NaN   NaN

1 个答案:

答案 0 :(得分:0)

不要使用变量名dict,因为python代码字。

.items()按字典循环,要在MultiIndex中进行选择,请使用slicers

d = {
    "a" : 10,
    "b" : 100 
}

idx = pd.IndexSlice

for k, v in d.items():
    df.loc[idx[k, :], :] /=  v
    #same like
    #df.loc[idx[k, :], :] =  df.loc[idx[k, :], :] / v

print(df)
         col1  col2
ix0 ix1            
a   a    0.00  0.30
    b    0.10  0.20
b   a    0.02  0.01
    b    0.03  0.00