如何使用 .loc 语法创建新列?

bar*_*icz 5 python dataframe pandas

我有一个数据框中cols存在的列 ( )名称列表。

我想在另一个数据框中按这些名称插入列。

所以我使用for循环来迭代列表并一一创建列:

cols = ['DEPTID', 'ACCOUNT', 'JRNL LINE DESCRIPTION', 'JRNL DATE', 'BASE AMOUNT', 'FOREIGN CURRENCY', 'FOREIGN AMOUNT', 'JRNL SOURCE']
for col in cols:
    # "summary" and "obiee" are dataframes
    summary.loc[obiee['mapid'], col] = obiee[col].tolist()
Run Code Online (Sandbox Code Playgroud)

但是,我想摆脱for循环。

所以我尝试使用以下.loc语法进行多列分配:

cols = ['DEPTID', 'ACCOUNT', 'JRNL LINE DESCRIPTION', 'JRNL DATE', 'BASE AMOUNT', 'FOREIGN CURRENCY', 'FOREIGN AMOUNT', 'JRNL SOURCE']
summary.loc[obiee['mapid'], cols] = obiee[cols]
Run Code Online (Sandbox Code Playgroud)

但是 Pandas 会抛出一个错误:

KeyError: "['DEPTID' 'ACCOUNT' 'JRNL LINE DESCRIPTION' 'JRNL DATE' 'BASE AMOUNT'\n 'FOREIGN CURRENCY' 'FOREIGN AMOUNT' 'JRNL SOURCE'] not in index"
Run Code Online (Sandbox Code Playgroud)

这种语法不可能吗?否则我该怎么做?

piR*_*red 2

join

您可以创建一个新的数据框,然后join. 根据您的问题描述和示例代码,'mapid'表示数据框中的索引值summaryjoin被制作为在索引上合并。因此,通过设置obiee的索引,'mapid'然后采用适当的列,我们就可以使用join.

summary.join(obiee.set_index('mapid')[cols])
Run Code Online (Sandbox Code Playgroud)