【问题标题】:overwrite slice of multi-index dataframe with series用系列覆盖多索引数据帧的切片
【发布时间】:2020-01-24 20:35:27
【问题描述】:

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

我可以通过首先根据列的索引对系列的索引进行排序,然后使用 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

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

期望的输出:

         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

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

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    你尝试过类似的方法吗?

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

    生成的 df 在这里

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

    【讨论】:

    • 这行得通,谢谢!!这是不应该使用链式索引的规则的一个例外,因为它是否返回视图或副本是不可靠的? (pandas-docs.github.io/pandas-docs-travis/user_guide/…)
    • @alvarowier 哦,好吧,如果我们尝试深入,那真的“应该避免”,但似乎你不是第一个遇到这个问题的人,请参阅这里 -> github.com/pandas-dev/pandas/issues/22493
    • 更新:您上面的解决方案适用于示例,但是当我在我实际需要解决方案的代码中尝试它时,它不起作用;所以我想链式索引毕竟是不可靠的......无论如何谢谢:)
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 2017-08-11
    • 2021-10-29
    • 1970-01-01
    • 2019-12-28
    • 2020-08-13
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多