簡體   English   中英

如何根據列中的唯一值最好地遍歷 DataFrame 上的行?

[英]How do I best iterate through rows on a DataFrame based on unique values in one of the columns?

我有一個包含大約 60K 行的價目表,其中包含大約 5.5K 種服務持續時間不同的產品。 簡化后看起來像這樣:

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 個月的項目,我想查看此列表,並刪除持續時間不是 12、24 或 36 個月的任何產品(如果此特定產品不能作為 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 個月的項目,我只想刪除非 12,24 或 36 行。 在這種情況下,這只適用於產品“Y”。

沒有預期的輸出,我猜測

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM