将多索引数据框的子集除以字典中的值
Posted
技术标签:
【中文标题】将多索引数据框的子集除以字典中的值【英文标题】:Divide subset of multiindex Dataframe by a value from dictionary 【发布时间】:2019-03-22 22:34:29 【问题描述】:我有多索引 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】:不要使用变量名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
【讨论】:
它有效,谢谢。顺便说一句,为什么我的for
循环不起作用?
我认为问题在于df.loc[letter]
它不返回MultiIndex
DataFrame以上是关于将多索引数据框的子集除以字典中的值的主要内容,如果未能解决你的问题,请参考以下文章