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
我正在尝试将Series分配给DataFrame
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
有什么想法吗?
答案 0 :(得分:2)
直接分配。系列赋值默认情况下按索引对齐:
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
答案 1 :(得分:0)
直接分配可能是可行的方法。如果将系列转换为数据框,也可以使用merge
:
>>> 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