我有一段代码试图合并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,并仅加入该区域中的字段。
非常感谢。
答案 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提供了很棒的提示!