使用不同的 DataFrame 更改 pandas DataFrame 切片的值
Altering values from a pandas DataFrame slice using different DataFrames
我想使用来自其他具有公共索引的 DataFrame 的切片将值分配给 pandas DataFrame 的列。或多或少类似于在 df1 中创建一个新列,填充来自具有相同索引的另一个 DataFrame 列(在以下示例中为 df2['D'])的值。
示例:我有两个 DataFrame,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 或查询做很多其他事情,但是 none 其中的工作。
这个例子是根据我需要处理包含大量数据的表而创建的,这就是我想要优化结果的原因。
提前致谢!
赋值即可
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
我想使用来自其他具有公共索引的 DataFrame 的切片将值分配给 pandas DataFrame 的列。或多或少类似于在 df1 中创建一个新列,填充来自具有相同索引的另一个 DataFrame 列(在以下示例中为 df2['D'])的值。
示例:我有两个 DataFrame,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 或查询做很多其他事情,但是 none 其中的工作。
这个例子是根据我需要处理包含大量数据的表而创建的,这就是我想要优化结果的原因。
提前致谢!
赋值即可
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