我有一个数据框中存在的列名(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()
不过,我想摆脱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]
但是熊猫会抛出错误:
KeyError: "['DEPTID' 'ACCOUNT' 'JRNL LINE DESCRIPTION' 'JRNL DATE' 'BASE AMOUNT'\n 'FOREIGN CURRENCY' 'FOREIGN AMOUNT' 'JRNL SOURCE'] not in index"
使用此语法不可能吗?否则我该怎么办?
答案 0 :(得分:1)
您有一个dataFrame df1 ..带有一些列...
并且您想要df2中的那些...您要做的就是将它们等同如下所示
df2 = pd.DataFrame({ 'A' : 1.,
....: 'B' : pd.Timestamp('20130102'),
....: 'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
....: 'D' : np.array([3] * 4,dtype='int32'),
....: 'E' : pd.Categorical(["test","train","test","train"]),
....: 'F' : 'foo' })
df1 = pd.DataFrame({ 'G' : 1.,
....: 'H' : pd.Timestamp('20130102'),
....: 'I' : pd.Series(1,index=list(range(4)),dtype='float32'),
....: 'J' : np.array([3] * 4,dtype='int32'),
....: 'K' : pd.Categorical(["test","train","test","train"]),
....: 'L' : 'foo' })
df2['G'],df2['F'] = df1['G'],df1['H']
答案 1 :(得分:1)
join
您可以创建一个新的数据框,然后创建join
。根据问题描述和示例代码,'mapid'
表示summary
数据框中的索引值。使join
在索引上合并。因此,通过将obiee
的索引设置为'mapid'
然后采用适当的列,我们可以只使用join
。
summary.join(obiee.set_index('mapid')[cols])