Pandas:根据平坦的柱值设置MultiColumn值

时间:2016-08-01 14:38:26

标签: python pandas

我有一个MultiColumned数据框如下:

Out[1]: 
Empty DataFrame
Columns: [(price, mean), (price, mom_2), (units, mean), (units, mom_2)]
Index: []

我有mean的一些(平面)值,我想将其放入priceunits

>>> 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

去这儿的方式是什么?

1 个答案:

答案 0 :(得分:1)

你是对的,IndexSlice的选择会保持水平。我不知道这里有任何简洁的方法(如果它存在的话)。

安全的解决方法是重新编制系列索引:

value.index = pd.MultiIndex.from_product([value.index, ['mean']])
resultsDf.loc[idx] = value

或者(但可能有风险),如果你确定框架中的列和行中的行的顺序是相同的,那么这也应该有效:

resultsDf.loc[idx, pd.IndexSlice[:, 'mean']] = value.tolist()