用系列覆盖多索引数据帧的片段

时间:2019-09-24 16:58:46

标签: python pandas dataframe multi-index

我有一个多索引数据框,想要将其某一列的一个切片设置为等于一个序列,并根据列切片和系列的索引匹配进行排序(排序)。列的最内层索引和系列的索引相同,除了它们的排序(排序)。 (请参见下面的示例)

我可以通过首先根据列的索引对系列的索引进行排序,然后使用series.values(请参见下文)来做到这一点,但这感觉像是一种解决方法,我想知道是否可以将系列直接分配给列切片。

示例:

    import pandas as pd
    multi_index=pd.MultiIndex.from_product([['a','b'],['x','y']])
    df=pd.DataFrame(0,multi_index,['p','q'])
    s1=pd.Series([1,2],['y','x'])
    df.loc['a','p']=s1[df.loc['a','p'].index].values

上面的代码提供了所需的输出,但是我想知道是否可以更简单地完成最后一行,例如:

    df.loc['a','p']=s1

但这会将列切片设置为NaNs。

所需的输出:

         p  q
    a x  2  0
      y  1  0
    b x  0  0
      y  0  0

从df.loc ['a','p'] = s1获得输出:

         p  q
    a x  NaN  0
      y  NaN  0
    b x  0.0  0
      y  0.0  0

对我来说,这似乎是一个简单的问题,但我无法在任何地方找到答案。

1 个答案:

答案 0 :(得分:0)

您尝试过类似的方法吗?

df.loc['a']['p'] = s1

结果df在这里

     p  q
a x  2  0
  y  1  0
b x  0  0
  y  0  0
相关问题