猿问

在 python pandas 中处理多个 for 循环

我正在处理一个包含 5 列数据的熊猫数据框。我需要在每列上添加过滤器以执行某些计算。


for mfilter in raw_df['Column1'].unique():


        m_filter=raw_df[raw_df['Column1']==mfilter]

        for rfilter in m_filter['Column2'].unique():


            r_filter=m_filter[m_filter['Column2']==rfilter]

            for cfilter in r_filter['Column3'].unique():


                c_filter=r_filter[r_filter['Column3']==cfilter]

                for cafilter in c_filter['Column4'].unique():


                    ca_filter=c_filter[c_filter['Column4']==ca_filter]


                    for part in ca_filter['part_no'].unique():



                        part_df=ca_filter[(category_filter['part_no']==part)]

我还有另一列“值”,在进入“部分”for 循环后,我将对其执行一些计算。


由于数据非常大,完整执行需要大约 7-8 小时(每个部分大约 1 秒)的时间。有没有更好的方法来减少所花费的时间并提高时间效率?


这是一些示例数据:


Column1 Column2 Column3 part_no Values

A   J   X   1   1

A   K   Y   2   2

B   K   X   3   3

C   L   Y   4   4

C   L   X   5   5

D   J   X   6   6

D   J   X   6   7

D   J   X   6   8

C   L   Y   4   9

C   L   Y   4   10

C   L   Y   4   11

在数据集中,如果我们观察到,Values 列的每个部分(每个类别)都有特定的值。在获取每个零件数据时,我必须借助该 part_data 的值执行某些计算。我将把这个 part_df 推到另一个函数,其余的任务发生在这个函数中。


慕勒3428872
浏览 135回答 1
1回答

慕的地8271018

您可以使用这样的东西(我没有使用Column4,因为您的样本数据中不存在):df.groupby(['Column1', 'Column2', 'Column3', 'part_no']).apply(print)它调用对print指定列具有相同值的每个组指定的函数(在本例中)。输出是:  Column1 Column2 Column3  part_no  Values0       A       J       X        1       1  Column1 Column2 Column3  part_no  Values1       A       K       Y        2       2  Column1 Column2 Column3  part_no  Values2       B       K       X        3       3  Column1 Column2 Column3  part_no  Values4       C       L       X        5       5   Column1 Column2 Column3  part_no  Values3        C       L       Y        4       48        C       L       Y        4       99        C       L       Y        4      1010       C       L       Y        4      11  Column1 Column2 Column3  part_no  Values5       D       J       X        6       66       D       J       X        6       77       D       J       X        6       8现在您需要做的就是定义一个函数,其中包含您在内部循环中拥有的任何内容,例如:def Pothuri(part_df):    # whatever other code you didn't show us, using part_df['Values'] etc.然后:df.groupby(['Column1', 'Column2', 'Column3', 'part_no']).apply(Pothuri)
随时随地看视频慕课网APP

相关分类

Python
我要回答