【发布时间】:2026-01-24 03:55:02
【问题描述】:
我有 2 个数据框。
我的主要数据框dffinal
date id och och1 och2 och3 cch1 LCH L#
0 3/27/2020 1 -2.1 3 3 1 5 NaN NaN
1 4/9/2020 2 2.0 1 2 1 3 NaN NaN
我的第二个数据框df2
date och cch och1 och2 och3 cch1
0 5/30/2012 -0.7 -0.7 3 -1 1 56
1 9/16/2013 0.9 -1.0 6 4 3 7
2 9/26/2013 2.5 5.4 2 3 2 4
3 8/26/2016 0.1 -0.7 4 3 5 10
我有这个循环
for i in dffinal.index:
df3=df2.copy()
df3 = df3[df3['och1'] >dffinal['och1'].iloc[i]]
df3 = df3[df3['och2'] >dffinal['och2'].iloc[i]]
df3 = df3[df3['och3'] >dffinal['och3'].iloc[i]]
df3 = df3[df3['cch1'] >dffinal['cch1'].iloc[i]]
dffinal['LCH'][i] =df3["och"].mean()
dffinal['L#'][i] =len(df3.index)
从我的代码中可以清楚地看出,LCH 和 L# 的值是根据上述条件从 df2(df3) 获得的。
这段代码运行良好,但速度很慢。我发现我可以通过 pandas 矢量化来提高效率。但是,我不知道该怎么做。
这是我想要的结果
date id och och1 och2 och3 cch1 LCH L#
0 3/27/2020 1 -2.1 3 3 1 5 0.900000 1.0
1 4/9/2020 2 2.0 1 2 1 3 1.166667 3.0
如果您能帮助我提高代码效率,我将不胜感激
正确答案
我个人使用@shadowtalker easy method 的答案,只是因为我无法理解它是如何工作的。
最有效的答案是fast but complex
【问题讨论】:
-
如果您可以以 CSV 或 JSON 格式发布数据,这将大有帮助,这样人们就可以轻松加载并测试他们的答案。固定宽度不太理想。
-
还有 -
diffinal是如何定义的? -
@shadowtalker 抱歉,我试图根据这个*.com/a/20159305/15542251 指南来解决这个问题。不确定我是否理解正确。
diffinal只是我的第一个数据框 -
请参阅include a minimal data frame,了解如何在代码中包含数据框。让他人轻松帮助您。
-
那只是一个支持项。请继续使用intro tour 中的on topic 和how to ask。
标签: python pandas vectorization