Python 通过多索引将系列分配给数据帧

Python 通过多索引将系列分配给数据帧,python,pandas,dataframe,indexing,series,Python,Pandas,Dataframe,Indexing,Series,我有一个系列: df_a = pd.DataFrame(data = [[1,2,3], [1,2,3], [1,2,3], [1,2,3]], index = [['a', 'a', 'a', 'a'], ['b', 'b', 'b', 'b'] ], columns=['A', 'B', 'C']) A B C a b 1 2 3 b 1 2 3 b 1 2 3 b 1 2 3 我正在尝试将序列分配给数据帧 df_b = pd.Serie

我有一个系列:

df_a = pd.DataFrame(data = [[1,2,3], [1,2,3], [1,2,3], [1,2,3]], index = [['a', 'a', 'a', 'a'], ['b', 'b', 'b', 'b'] ], columns=['A', 'B', 'C'])

     A  B  C
a b  1  2  3
  b  1  2  3
  b  1  2  3
  b  1  2  3
我正在尝试将序列分配给数据帧

df_b = pd.Series(data = [1,2,3, 4], index = [['a', 'a', 'a', 'a'], ['b', 'b1', 'b2', 'b3'] ])

a  b     1
   b1    2
   b2    3
   b3    4
但我得到:

    idx = df_a.index.intersection(df_b.index)
    df_a.loc[idx]['new_column'] = df_b.loc[idx]
我希望得到:

     A  B  C
a b  1  2  3
  b  1  2  3
  b  1  2  3
  b  1  2  3

知道怎么回事吗?

直接分配即可。默认情况下,系列指定按索引对齐:

     A  B  C new_column
a b  1  2  3   1
  b  1  2  3   1
  b  1  2  3   1
  b  1  2  3   1

直接分配可能是最好的办法。如果将序列转换为数据帧,也可以使用
merge

df_a['new_column'] = df_b

print(df_a)

     A  B  C  new_column
a b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1

new_column
代表什么?@DanielMesejo这是系列中的数据:df_a.loc[idx]['new_column']=df_b.loc[idx]
>>> df_a.join(df_b.to_frame('new_column'))
     A  B  C  new_column
a b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1