python - 简化嵌套循环python
问题描述
我有两个名为 a 和 b 的大列表。它们的大小均为 2000 个值。每个值都是具有 35136 个值的 DataFrame。
a = [Dataframe, Dataframe....] --> Size:2000
a[0] = [0, 0, 0, 2, 0, 0, 3, 0....] -->Name: colA, Size:35136
.
.
a[8] = []
.
.
b = [Dataframe, Dataframe....]
b[0] = [11, 0, 0, 0, 50, 0, 0, 11.....] -->Name: colB, Size:35136
我需要更改 DataFrame 在两个列表和每个 DataFrame 中进行迭代。如何更快地做到这一点?
for j in range(0, 2000):
for i in range(0, 35136):
if len(a[j]) == 0:
b[j] = []
else:
if b[j]['colA'][i] != 0:
tmp = b[j]['colA'][i]
if (b[j]['colA'][i] == 0) & (a[j]['colB'][i] == 0):
b[j]['colA'][i] = tmp
所需的输出用于此输入:
b[0] = [11, 11, 11, 0, 50, 50, 0, 11.....] -->Name: colB, Size:35136
谢谢你。
解决方案
如果我理解您的示例,我认为这应该是等效的(并且速度要快得多):
for idx, (df_a, df_b) in enumerate(zip(a, b)):
if len(df_a) == 0:
b[idx] = []
else:
df_b['colA'].mask(cond=(df_b['colA'] == 0) & (df_a['colB'] == 0),
other=df_b['colA'].where(df_b['colA'] != 0).ffill(),
inplace=True)
这依赖于所有具有相同索引(不仅仅是相同大小)的 DataFrame,除非您设置了自己的索引,否则这将是默认设置。
推荐阅读
- swift - 更改静态地图图像中折线的颜色
- javascript - 为什么即使未单击按钮,在子组件 onclick 中设置状态也会导致递归循环?
- c# - 实现fire and forget异步方法调用的正确方法
- sql-server - SQL Server:如何在一定时间间隔后自动更新表中的数据
- javascript - 从特定的动态值启动 javascript 秒表
- android - Android 使用 NotificationListenerService 执行通知操作
- asp.net-mvc - 找不到路径“”的控制器或未实现 IController。错误
- python - import QCustomPlot2 ImportError: DLL load failed: 找不到指定的过程
- python - django:在添加新照片时删除以前的照片
- javascript - 在 Django 中使用 Javascript 中的模板标签