我有一个MultiColumned数据框如下:
Out[1]:
Empty DataFrame
Columns: [(price, mean), (price, mom_2), (units, mean), (units, mom_2)]
Index: []
我有mean
的一些(平面)值,我想将其放入price
和units
:
>>> value
Out[2]:
price 0.0
units 0.0
dtype: float64
我认为要走的路是
resultsDf.loc[idx, pd.IndexSlice[:, 'mean']] = value
但事实并非如此,因为价值未被接管:
resultsDf.loc
price units
mean mom_2 mean mom_2
(desc, foo) (desc, bar)
1500002071 65 NaN NaN NaN NaN
我想,经过进一步检查,问题在于,尽管我选择了基于第一级,但我仍然有一个多级左手边,我不能从单一水平的右手边合并/粘贴:
>>> resultsDf.loc[idx, pd.IndexSlice[:, 'mean']]
Out[5]:
price mean NaN
units mean NaN
Name: (1500002071, 65), dtype: object
>>> value
Out[6]:
price 0.0
units 0.0
dtype: float64
去这儿的方式是什么?
答案 0 :(得分:1)
你是对的,IndexSlice
的选择会保持水平。我不知道这里有任何简洁的方法(如果它存在的话)。
安全的解决方法是重新编制系列索引:
value.index = pd.MultiIndex.from_product([value.index, ['mean']])
resultsDf.loc[idx] = value
或者(但可能有风险),如果你确定框架中的列和行中的行的顺序是相同的,那么这也应该有效:
resultsDf.loc[idx, pd.IndexSlice[:, 'mean']] = value.tolist()