簡體   English   中英

如何使 Python 代碼更有效地轉換 power BI 中的數據以減少刷新時間?

[英]How to make Python code to transform data in power BI more efficient to reduce refresh time?

我目前正在使用 .apply 和 if 語句創建一個條件列,該列返回基於 Power BI 表中其他列的字符串值。 這些條件是以考慮錯誤輸入數據的方式對數據進行分類。 該代碼完全返回我想要的結果但速度很慢,該表大約有 50,000 行並且 if 語句正在運行每一行。 這是我的代碼:

# 'dataset' holds the input data for this script

import pandas as pd
import numpy as np

fd = dataset[pd.isnull(dataset['bID'])]["RepackaID"].dropna().tolist()

def conditions(x):

    if pd.notnull(x['bID']) and pd.notnull(x["RepackaID"]):
        return 'b Input'
    elif x['bID'] == 0:
        return 'b Input'
# Below is the line that I struggled to do in power query M
    elif pd.notnull(x['aID']) and x['aID'] in fd:
        return "a Repack Output"
    elif x["Repack"] == True:
        return "b Repack Output"
    elif pd.notnull(x["bID"]):
        return "b Traded"
    elif x['cID'] == 94 or x['cID'] == 41:
        return "b Repack Output"
    elif pd.notnull(x["RepackaID"]):
        return "a Repack Input"
    else:
        return "a Output"

dataset['new column'] = dataset.apply(conditions, axis=1)

我在 power query M 中努力做的那行標有一條注釋,它引用上面定義的列表 fd。 如果 RepackaID 中存在 aID 的值但在 50,000 行以上執行此操作,則只是將此結果“重新打包輸出”返回到我們的新列的情況。 rest 似乎很容易在 power query m 中實現。

只是想知道我是否以最 pythonic 的方式執行此操作(我懷疑不是),或者是否有更好的方法在 m power 查詢中執行此操作,有什么想法嗎? 我實際上更願意在 m power 查詢中執行此操作,因為從事此工作的其他人不使用 python。任何改進都將受到歡迎。

在 Python pandas 中,始終以矢量化操作為目標,避免使用for... iterrows.apply (通常是隱藏循環)運行行式操作。 具體來說,對於多個條件語句,請考慮numpy.select ,它有條件地在相等數量的條件列表和值列表之間進行元素分配,所有這些都具有整個 arrays 而不是單個單元格。

fd = dataset[pd.isnull(dataset['bID'])]["RepackaID"].dropna().tolist()

# LIST OF BOOLEAN ARRAYS
conditions = [
    (pd.notnull(dataset['bID'])) & (pd.notnull(dataset["RepackaID"])),
    dataset['bID'] == 0,
    (pd.notnull(dataset['aID'])) & (dataset['aID'].isin(fd)),
    dataset["Repack"] == True,
    pd.notnull(dataset["bID"]),
    (dataset['cID'] == 94) | (dataset['cID'] == 41),
    pd.notnull(dataset["RepackaID"])
]

# LIST OF RETURN VALUES
values = [
    "b Input",
    "b Input",
    "a Repack Output",
    "b Repack Output",
    "b Traded",
    "b Repack Output".
    "a Repack Input"
]

dataset['new column'] = np.select(conditions, values, default="a Output")

暫無
暫無

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

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