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)
这种语法不可能吗?否则我该怎么做?
join您可以创建一个新的数据框,然后join. 根据您的问题描述和示例代码,'mapid'表示数据框中的索引值summary。 join被制作为在索引上合并。因此,通过设置obiee的索引,'mapid'然后采用适当的列,我们就可以使用join.
summary.join(obiee.set_index('mapid')[cols])
Run Code Online (Sandbox Code Playgroud)