【问题标题】:Assign a Series with its index to a multiIndex dataframe with loc使用 loc 将一个系列及其索引分配给一个 multiIndex 数据框
【发布时间】:2022-11-13 04:32:03
【问题描述】:

使用索引级别为 2 的数据框,要么是空的,要么是填充了一些东西:

import pandas as pd
midx = pd.MultiIndex(levels=[[],[]],
                     codes=[[],[]],
                     names=[u'var_name', u'modalities']
                    )
df = pd.DataFrame(index=midx)

df.loc[("foo","bar"),"A"]  = 3
df

### Returns
                       A
var_name modalities     
foo      bar         3.0

我想分配一个系列的值:

s = pd.Series([1,2,3], index=["a","b","c"])

这样的结果是:

                       A
var_name modalities     
foo      bar         3.0
baz      a           1.0
         b           2.0
         c           3.O

我怎么能用loc 或其他解决方案得到它?

df.loc[("baz", s.index), "A"] = s 不起作用。

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    我没有找到loc 的方法。 我目前的解决方案是使用concat 方法,这对我来说感觉有点不自然(第一个有解决方案的答案会打勾)。

    用 concat 解决

    import pandas as pd
    midx = pd.MultiIndex(levels=[[],[]],
                         codes=[[],[]],
                         names=[u'var_name', u'modalities']
                        )
    df = pd.DataFrame(index=midx)
    df.loc[("foo","bar"),"A"]  = 3
    
    s = pd.Series([1,2,3], index=["a","b","c"], name="A")
    s_midx =pd.concat([s], keys=["baz"])
    df_s_midx=pd.DataFrame(s_midx) # Is there a way to avoid this?
    pd.concat([df, df_s_midx])
    

    可能有一种方法可以避免将系列s_midx 转换为数据框,但我没有找到!

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多