我有一份价格表,大约有6万条生产线,包含大约5.5万种不同服务期限的产品。它看起来是这样的:
dpl_Description w/o months dpl_Order Duration
X 36
X 9
Y 23
F 26
F 7
F 18
X 6
X 4
X 15
Z 35
Z 6
Z 5
C 3
X 34
Y 12
Y 5
(关于这个话题:有没有更好的方式发布表格?)
我想查看此列表,删除任何持续时间不是12、24或36个月的产品,前提是存在12个月的项目(如果此特定产品不能作为12个月的项目提供,则所有项目都应保留)
这是我目前实现这一目标的代码:
for pwl in pd.unique(result["dpl_Description w/o months"]):
if result[(result["dpl_Description w/o months"] == pwl) & (result["dpl_Order Duration"] == 12)].empty:
pass
else:
for i in result[(result["dpl_Description w/o months"] == pwl) & (result["Charity"] != "Yes")]["dpl_Order Duration"]:
if i in [12, 24, 36]:
else:
result.drop(result[(result["dpl_Description w/o months"] == pwl) & (result["dpl_Order Duration"] == i)].index, inplace=True)
代码运行完成了我想要的,但是速度非常慢。考虑到我计划围绕它编写一个函数,并将这种方法用于需要在数据集上执行的各种其他操作,我希望获得一些反馈
解决此问题的更好方法是什么,从而实现更高效的计算
编辑 为了加速代码,我尝试了以下方法,因为这样可以避免在单个持续时间中出现大量循环。但是,它的运行速度仍然非常慢:
for pwl in pd.unique(result["dpl_Description w/o months"]):
if result[(result["dpl_Description w/o months"] == pwl) & (result["dpl_Order Duration"] == 12)].empty:
pass
else:
result.drop(result[~(result["dpl_Order Duration"].isin([12,24,36])) & (result["Charity"] != "Yes") & (result["dpl_Description w/o months"] == pwl)].index, inplace=True)
2。编辑
根据提供的示例数据集,我期望的输出为:
X 36
X 9
F 26
F 7
F 18
X 6
X 4
X 15
Z 35
Z 6
Z 5
C 3
Y 12
如上所述,我只希望删除非12、24或36行,如果同一产品作为12个月项目也在价目表中。在这种情况下,这只适用于产品“Y”
由于没有预期的输出,我猜测了一下
相关问题 更多 >
编程相关推荐