python - Pandas 将系列分配给多索引的新列

标签 python pandas dataframe indexing series

所以我用 MultiIndex 创建了一个数据框

df = pd.DataFrame({
    'C1': ['x', 'x', 'y', 'y', 'z', 'z'],
    'C2': ['a', 'b', 'a', 'b', 'a', 'b'],
    'C3': [10, 11, 12, 13, 14, 15]})
df.set_index(['C1', 'C2'], inplace=True)

我得到以下数据框

       C3
C1 C2    
x  a   10
   b   11
y  a   12
   b   13
z  a   14
   b   15

我也有一个索引为 C2 的系列:

series = pd.Series([100], index=['a'])

我想将这个系列分配给新列 C4,仅分配给“x”第一个索引。如果我使用 .assign 它会工作,但它会返回一个副本:

df.loc['x'].assign(C4=series)

我得到

    C3     C4
C2           
a   10  100.0
b   11    NaN

但我无法将其分配给原始数据

df.loc['x'] = df.loc['x'].assign(C4=series)

产量

         C3
C1 C2      
x  a    NaN
   b    NaN

如果我使用这样的赋值,我会得到相同的结果:

df.loc['x', 'C4'] = series

但它会产生 NaN。

         C3  C4
C1 C2          
x  a    NaN NaN
   b    NaN NaN
y  a   12.0 NaN
   b   13.0 NaN
z  a   14.0 NaN
   b   15.0 NaN

如何分配?

最佳答案

你可以去 pd.IndexSlice

df.loc[pd.IndexSlice['x',series.index.tolist()],'C4']  = series.values

       C3     C4
C1 C2           
x  a   10  100.0
   b   11    NaN
y  a   12    NaN
   b   13    NaN
z  a   14    NaN
   b   15    NaN

关于python - Pandas 将系列分配给多索引的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50992000/

相关文章:

python - Pandas 的excel索引匹配

pandas - 将索引列分配给空的 Pandas 数据框

dataframe - 超出 Apache Spark UDF 的限制 [UDF_MAX_COUNT_EXCEEDED]

python - 更改 Python swigged C 函数的返回值类型

python - logits 和 labels must be broadcastable error in Tensorflow RNN

python - 当我尝试 reshape 我的训练数据时,出现此错误.... ValueError : cannot reshape array of size 568 into shape (28, 28,3)

python - 这是 Python 的引用传递行为吗?

python - 获取 Pandas 列中百分位值的下一条记录

python - 使用用户定义的函数提取、修改和粘贴字符串

python - 使用 Python Pandas 处理双 for 循环