【发布时间】:2021-12-31 01:05:38
【问题描述】:
我有两个数据框: 一个(多索引)大小为 (1113, 7897),列中包含不同国家和部门的值,行中包含不同 ID,例如:
F_Frame:
AT BE ...
Food Energy Food Energy ...
ID1
ID2
...
在另一个数据框 (CC_LO) 中,我有想要与前一个数据框 (F_frame) 匹配的具有相应国家和 ID 的因子值,所以我如果 F_frame 中的值与国家和 ID 匹配,则将它们与 CC_LO 上的因子值相乘。如果它们不匹配,我会输入一个零。
到目前为止,我的代码似乎可以工作,但运行速度非常慢。有没有更聪明的方法来匹配基于索引/标题名称的表? (代码在 49 个国家/地区循环,并为该国的每 163 个部门乘以相同的因子)
LO_impacts = pd.DataFrame(np.zeros((1113,7987)))
for i in range(0, len(F_frame)):
for j in range(0, 49):
for k in range(0, len(CF_LO)):
if (F_frame.index.get_level_values(1)[i] == CF_LO.iloc[k,1] and
F_frame.columns.get_level_values(0)[j*163] == CF_LO.iloc[k,2]):
LO_impacts.iloc[i,(j*163):((j+1)*163)] = F_frame.iloc[i,(j*163):((j+1)*163)] * CF_LO.iloc[k,4]
else:
LO_impacts.iloc[i,(j*163):((j+1)*163)] == 0
【问题讨论】:
-
让我们看看使用合并的内连接,pandas 确实使用索引(行索引和列标题)自动执行大多数操作。
标签: python pandas dataframe loops match