为了账号安全,请及时绑定邮箱和手机立即绑定

在 python pandas 中处理多个 for 循环

在 python pandas 中处理多个 for 循环

慕勒3428872 2022-12-27 10:27:43
我正在处理一个包含 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 ValuesA   J   X   1   1A   K   Y   2   2B   K   X   3   3C   L   Y   4   4C   L   X   5   5D   J   X   6   6D   J   X   6   7D   J   X   6   8C   L   Y   4   9C   L   Y   4   10C   L   Y   4   11在数据集中,如果我们观察到,Values 列的每个部分(每个类别)都有特定的值。在获取每个零件数据时,我必须借助该 part_data 的值执行某些计算。我将把这个 part_df 推到另一个函数,其余的任务发生在这个函数中。
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以使用这样的东西(我没有使用Column4,因为您的样本数据中不存在):


df.groupby(['Column1', 'Column2', 'Column3', 'part_no']).apply(print)

它调用对print指定列具有相同值的每个组指定的函数(在本例中)。输出是:


  Column1 Column2 Column3  part_no  Values

0       A       J       X        1       1

  Column1 Column2 Column3  part_no  Values

1       A       K       Y        2       2

  Column1 Column2 Column3  part_no  Values

2       B       K       X        3       3

  Column1 Column2 Column3  part_no  Values

4       C       L       X        5       5

   Column1 Column2 Column3  part_no  Values

3        C       L       Y        4       4

8        C       L       Y        4       9

9        C       L       Y        4      10

10       C       L       Y        4      11

  Column1 Column2 Column3  part_no  Values

5       D       J       X        6       6

6       D       J       X        6       7

7       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)



查看完整回答
反对 回复 2022-12-27
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信