熊猫/ Groupby /应用优化

时间:2020-07-30 05:11:33

标签: python pandas pandas-groupby pandas-apply

我有一段代码试图合并cols。在pandas结构中使用重复的cols名称,基本上,我正在尝试执行类似本文的操作:

Python Pandas merge samed name columns in a dataframe

但是,我要处理的DataFrame是从大约1GB的CSV加载的,并且具有大约2600列和27000+行。

代码可以运行,但运行时间约为2小时20分钟。

在2600列中,只有大约30个列需要合并为4个列,例如从13日到42日。

有没有一种方法可以优化链接文章中提到的代码?也许找到一种方法告诉熊猫仅在13日至42日之间访问GroupBy cols,并仅加入该区域中的字段。

非常感谢。

1 个答案:

答案 0 :(得分:0)

感谢RichieV的两个技巧。我最终使用了这两种技巧,最终做到了这一点:

第一部分将您的数据集按cols分为2部分,我在25岁时就这样做了,因为那是NaN值重复的cols结束的地方:

    sec1 = filtered_data.iloc[:,:25]
    sec2 = filtered_data.iloc[:,25:]

然后,您将数据帧的第一部分融化为变量和值cols,同时保留header_cols,这比融化整个数据帧的速度更快:

    sec1 = sec1.melt(id_vars=header_cols)

接下来,您只需对所有col中具有空值的行进行dropna操作,主要是在col中输入值:

    sec1 = sec1.dropna(axis='index', how='any') #remove rows with empty fields

最后将其向后旋转并加入2个拆分的数据帧:

    sec1 = sec1.pivot_table(index= header_cols,
                   columns='variable',
                   values='value',
                   aggfunc='first')
    sec1 = sec1.reset_index()
    sec1 = sec1.rename_axis(None, axis=1)
    filtered_data = p.concat([sec1, sec2], axis=1)

再次感谢RichieV提供了很棒的提示!