python - 如何有效地在具有相同索引的两个大型数据帧之间进行操作?
问题描述
我有这些数据帧(Zcp,Qp(0),Sc(0)):
i hs4 1995 ... 2013 2014 2015
0 004 0101 0.000 ... 0.000000 0.000000 0.000000
1 004 0102 0.000 ... 0.000000 0.000000 0.000000
2 004 0104 0.000 ... 0.000000 0.000000 0.000000
3 004 0105 1.548 ... 0.000000 0.000000 4.083000
4 004 0106 16.839 ... 38.298000 72.338000 83.931000
... ... ... ... ... ... ... ...
225765 894 9702 0.000 ... 12.961000 0.000000 0.000000
225766 894 9703 9.173 ... 17.804779 13.400000 16.979594
225767 894 9704 0.000 ... 0.000000 36.000000 0.000000
225768 894 9705 42.241 ... 1224.378276 164.680333 435.218955
225769 894 9706 0.000 ... 113.253000 18.656000 0.000000
hs4 1995 1996 ... 2013 2014 2015
0 0101 3.811149 3.780993 ... 3.781750 3.757388 3.755313
1 0102 3.788707 3.859526 ... 3.568241 3.618460 3.594909
2 0103 4.021830 4.014036 ... 3.901071 3.902159 3.879100
3 0104 3.580394 3.553510 ... 3.745742 3.761684 3.840236
4 0105 3.717383 3.734866 ... 3.731004 3.686321 3.654970
... ... ... ... ... ... ... ...
1236 9702 3.886697 4.089046 ... 3.913331 3.914801 3.973163
1237 9703 3.725988 3.749821 ... 3.710488 3.673745 3.790359
1238 9704 3.620836 3.612135 ... 3.692998 3.684579 3.635194
1239 9705 3.656766 3.696438 ... 3.621836 3.604557 3.578214
1240 9706 3.782179 3.840093 ... 3.732887 3.682156 3.729555
i 1995 1996 ... 2013 2014 2015
0 004 2.498013 2.709929 ... 3.251985 3.220664 3.222372
1 008 3.812630 4.111502 ... 3.683572 3.881263 4.087454
2 012 1.521194 1.565437 ... 1.206792 1.315348 1.383676
3 016 -0.000000 -0.000000 ... 2.604784 2.631275 2.639739
4 020 3.729594 3.946768 ... 2.133141 1.869886 3.441653
.. ... ... ... ... ... ... ...
219 876 2.278855 2.578395 ... 2.224869 1.905085 2.255480
220 882 0.868912 1.464654 ... 2.585345 3.209558 2.745666
221 887 0.698383 0.746020 ... 1.751111 1.761297 2.287436
222 891 4.737027 5.155827 ... -0.000000 -0.000000 -0.000000
223 894 1.620051 1.988590 ... 2.309357 1.737125 1.992602
我代表国家(c),hs4 代表产品(p),从 1995 年到 2015 年,每年都有这些值。我要做的是:
我刚开始是因为我找不到一种有效且快速的方法来为 i 和 hs4 关联相同的代码并执行我需要的操作。我在这种模式下尝试过,但它真的太慢了,它只用于乘法和求和:
for row1 in df.itertuples(index=False):
for row2 in q.itertuples(index=False):
datas1 = df.loc[row1._2:row1._22]
datas2 = q.loc[row2._1:row2._21]
if row1.hs4==row2.hs4:
df.loc[row1._2:row1._22]=datas1*datas2
Df = df.groupby(['i']).agg(np.sum).reset_index()
(随着 df.itertuples '1995'...'2015' 变成 '_2'...'_22',不知道为什么)。然后我应该用对数进行除法和求和,也许每个周期都更新 Qp 和 Sc。我在网上搜索了一些帮助,但没有找到正确的答案。
解决方案
推荐阅读
- python-2.7 - Python 从模块扩展类
- javascript - 从JS前端的图像缓冲区生成缩略图
- java - Android:应用程序图标从存根应用程序更新到最新版本后消失?
- ansible - Ansible 处理程序 - 独占重启或重新加载
- vb.net - 从代码隐藏有条件地隐藏/显示中继器内的按钮
- javascript - 按键后重置 lodash 去抖动
- html - href 被 ng-click 覆盖 - 移动
- css - full calendar_scheduler - 如何在垂直议程日设置最小宽度资源列并进行水平滚动
- powershell - powershell中的cut等效命令是什么
- c++ - LNK2019 未解析的外部符号“public: __thiscall