我想使用其他具有公共索引的DataFrame中的切片将值分配给Pandas DataFrame的列。或多或少像在df1中创建一个新列,以填充另一个DataFrame列(在以下示例中为df2 ['D'])中具有相同索引的值。
示例:我有两个数据框df1和df2。
df1
A B
g
a 0.286074 0.148268
b 0.271671 0.356847
c 0.155908 0.951075
df2
C D
g
c 0.218612 0.296498
d 0.382499 0.900638
现在,我想向df1添加一个新列,其中df2 ['D']中的所有值在df1中具有相同的索引(行)。我知道我可以做这样的事情:
for g in df2.index:
if g in df1.index.values.tolist():
df1.loc[g, 'D'] = df2.loc[g, 'D']
df1
A B D
g
a 0.286074 0.148268 NaN
b 0.271671 0.356847 NaN
c 0.155908 0.951075 0.296498
,效果很好!但是我认为该解决方案非常丑陋,根本没有使用pandas DataFrame的功能。
我试图做类似以下的事情,但是根本不起作用:
df1.reindex(df1.index.intersection(df2.index))['D'] = df2['D']
df1
A B
g
a 0.286074 0.148268
b 0.271671 0.356847
c 0.155908 0.951075
我已经尝试使用loc或query做其他很多事情,但是它们都不起作用。
此示例是根据我需要处理包含大量数据的表而创建的,这就是为什么我要优化结果的原因。
谢谢!
答案 0 :(得分:2)
只需分配
df1['D']=df2.D
df1
A B D
a 0.286074 0.148268 NaN
b 0.271671 0.356847 NaN
c 0.155908 0.951075 0.296498