0

我有一个考拉数据框,大约。其中有 600 万行。我需要执行一个操作,读取数据框中的每一行,提取每一行的值,然后在列表中进行查找(该列表中有 30 K 个元素)。如果找到返回 true,否则返回 false,并创建一个布尔数组作为输出。

我知道一种简单的方法是使用 iterrows() 方法遍历每一行。但这很耗时。寻找可以使流程更快的建议。

例如,样本数据框是——

        species     population
panda     bear          1864
polar     bear          22000
koala     marsupial     80000

现在我有一个列表,其中包含我的列中的值组合,如果在测试列表中找到,则获取每一行的值,例如 (bear,1864),如果不是 false,则将 true 附加到列表中

test_list =[(bear,189), (bear,1864) , (marsupial,9), ..... ]

test_list 长度约为 30k

样本输出将是

output = [True, False, False]

检查样本数据帧的每一行,第一行有值 (bear, 1864),因此输出列表的第一个元素为 true。第二行的值 (bear, 1864) 不在列表中。因此 False 被附加到输出列表等等。

4

1 回答 1

0

我认为您正在寻找应用功能。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

[IN] test_list = [("bear", 189), ("bear", 1864), ("marsupial", 9)]
     df = ks.DataFrame([["bear", 1864], ["bear", 22000], ["marsupial", 80000]], 
                  columns=["species", "population"], 
                  index = ["panda", "polar", "koala"])
     df.apply(lambda row: (row["species"], row["population"]) in test_list, axis=1).to_list()

[OUT] 
    [True, False, False]
于 2021-03-02T19:15:56.507 回答