我已经有了一个解决方案-但它非常慢(800行13分钟)。以下是数据帧的示例:
import pandas as pd
d = {'col1': [20,23,40,41,48,49,50,50], 'col2': [39,32,42,50,63,68,68,69]}
df = pd.DataFrame(data=d)
df
在一个新列中,我想计算col2的前几个值(例如三个)中有多少大于或等于col1的行值。我也继续第一排。你知道吗
这是我的慢代码:
start_at_nr = 3 #variable in which row start to calculate
df["overlap_count"] = "" #create new column
for row in range(len(df)):
if row <= start_at_nr - 1:
df["overlap_count"].loc[row] = "x"
else:
df["overlap_count"].loc[row] = (
df["col2"].loc[row - start_at_nr:row - 1] >=
(df["col1"].loc[row])).sum()
df
我得到一个更快的解决方案-谢谢你的时间!你知道吗
这是我得到的结果:
col1 col2 overlap_count
0 20 39 x
1 23 32 x
2 40 42 x
3 41 50 1
4 48 63 1
5 49 68 2
6 50 68 3
7 50 69 3
基本上将当前值
col1
与前3行col2
进行比较,然后从第3行开始比较。您可以按如下方式使用班次或者
要获得所需的输出,请将其分配回
df
和fillna
您可以在一条语句中使用
.apply()
来完成它,如下所示。我使用了一个便利函数process_row()
,它也包含在下面。你知道吗详细解决方案
输出:
IIUC,你可以做:
输出:
对于800行和
start_at_nr=3
,大约需要11毫秒。你知道吗相关问题 更多 >
编程相关推荐