如何最好地基于其中一列中的唯一值遍历数据帧上的行?

2024-06-03 12:22:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份价格表,大约有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”


Tags: 项目方法inforif产品orderdescription
1条回答
网友
1楼 · 发布于 2024-06-03 12:22:30

由于没有预期的输出,我猜测了一下

df = df[df['dpl_Order Duration'].isin([12, 24, 36])]

   dpl_Description w/o months  dpl_Order Duration
0                           X                  36
14                          Y                  12

相关问题 更多 >