[英]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.