【发布时间】:2021-10-29 08:41:54
【问题描述】:
我正在尝试使用与索引值匹配的系列值来设置具有多索引的数据框切片。但是整个切片只是用 NaN 填充。
考虑以下数据框和系列:
import pandas as pd
index = pd.Index(['a', 'b', 'c'])
multi_index = pd.MultiIndex.from_product([index, index])
df = pd.DataFrame({'A': range(9)}, index=multi_index)
df.sort_index(inplace=True) # just to be sure
ser = pd.Series([11, 22, 33], index)
df, ser
A
a a 0
b 1
c 2
b a 3
b 4
c 5
c a 6
b 7
c 8
a 11
b 22
c 33
dtype: int64
现在我正在尝试使用系列的内容设置切片,但结果出乎意料:
df.loc[('b',), 'A'] = ser
df
A
a a 0.0
b 1.0
c 2.0
b a NaN
b NaN
c NaN
c a 6.0
b 7.0
c 8.0
虽然指数一致:
df.loc[('b',), 'A'].index == ser.index
array([ True, True, True])
这应该很简单。我做错了什么?
【问题讨论】:
-
您的索引仅在级别 1 对齐,而不是整体多索引:
ser = pd.Series([11, 22, 33], pd.MultiIndex.from_tuples([('b', 'a'), ('b', 'b'), ('b', 'c')]))将正确对齐。或者你可以使用 BENY 的建议来打破与values的对齐 -
感谢您的评论。我已经怀疑是这样的问题。现在我可以在这个和 BENY 的建议之间做出选择。无论如何,我必须确保对齐。
标签: python pandas slice series multi-index