使用 Pandas 优化 for 循环

时间:2021-03-25 17:50:37

标签: python arrays pandas loops search

我有以下代码:

auftrag = []
for datensatz_nummer, datensatz in daten_e303.iterrows():
    if len(auftrag) != 0:
        found = False
        for x in auftrag:
            if x[0]["Rechnungsnummer"] == datensatz["Rechnungsnummer"]:
                if x[0]["Auftragsart"] == datensatz["Auftragsart"]:
                    if x[0]["Mandant"] == datensatz["Mandant"]:
                        if x[0]["Unterauftrag"] == datensatz["Unterauftrag"]:
                            x.append(dict(datensatz))
                            found = True
                            break
        if not found:
            auftrag.append([dict(datensatz)])
    else:
        auftrag.append([dict(datensatz)])

在 daten_e3030 中有一个大熊猫数据框,大约有 50 万行和 8 列,在 auftrag 中有一个带有子列表的列表,包含来自熊猫数据框的条目。 对于试用,您可以使用这些示例数据: https://1drv.ms/x/s!AnRIWP-3awPOg9YD2oo_INQjCCq2PA?e=IsRayA

导入使用:

daten_e303 = pandas.read_excel("Demo.xlsx")

您知道如何将方法从大约 2 小时缩短到 10 分钟以下吗?

感谢您的帮助, 拉斯

1 个答案:

答案 0 :(得分:0)

来自不同论坛的人给了我一个完美的解决方案:

auftrag = []
daten_e303.Unterauftrag.replace(numpy.nan, 0, inplace=True)
print("Filtern nach Auftrag und Separieren")
for _, y in daten_e303.groupby(["Rechnungsnummer", "Auftragsart", "Unterauftrag"]):
    auftrag.append(y.to_dict("records"))