【发布时间】:2020-09-25 09:46:53
【问题描述】:
我正在处理一个包含 5 列数据的 pandas 数据框。我需要在每列上添加过滤器以执行某些计算。
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_df 推送到另一个函数,剩下的任务在这个函数中进行。
【问题讨论】:
-
您能否提供少量示例数据(例如 CSV 或构建示例 DataFrame 的实际 Pandas 代码),用英语描述您想要完成的最终目标,并展示样本数据的最终结果?
-
看起来像
groupby(['Column1','Column2','Column3', 'Column4', 'part_no'])。 -
两个注意事项:(1) 变量名为
mfilter和m_filter意味着不同的事物绝对是一场噩梦,并且 (2) 你似乎在每次迭代中都覆盖了part_df,所以为什么不只是跳到最后一次迭代并立即生成最终的 part_df 吗?我确定这不是您想要的,但这就是您发布的代码似乎要做的。 -
@JohnZwinck 我更新了帖子,提供了更多见解。请看一下。
标签: python pandas performance for-loop time