【发布时间】:2020-09-21 23:49:23
【问题描述】:
我有一个包含三列的数据框:nums 有一些值可以使用,b 始终是 1 或 0 和 result 列,除了在第一行(因为我们必须有一个初始值才能使用)。
数据框如下所示:
nums b result
0 20.0 1 20.0
1 22.0 0 0
2 30.0 1 0
3 29.1 1 0
4 20.0 0 0
...
问题
我想从第二行开始遍历数据框中的每一行,进行一些计算并将结果存储在result 列中。由于我正在处理大文件,因此我需要一种方法来快速执行此操作,这就是为什么我想要apply 之类的东西。
我想做的计算是从 previous 行中获取 nums 和 result 中的值,如果在 current 行中,则 @ 987654332@ col 是0 然后我想(例如)从前一行添加num 和result。例如,如果该行中的b 是1,我想减去它们。
我尝试了什么?
我尝试使用apply,但我无法访问上一行,可悲的是,如果我设法访问上一行,数据框直到最后才会更新结果列。
我也尝试过使用这样的循环,但对于我正在使用的大型文件来说它太慢了:
for i in range(1, len(df.index)):
row = df.index[i]
new_row = df.index[i - 1] # get index of previous row for "nums" and "result"
df.loc[row, 'result'] = some_calc_func(prev_result=df.loc[new_row, 'result'], prev_num=df.loc[new_row, 'nums'], \
current_b=df.loc[row, 'b'])
some_calc_func 看起来像这样(只是一个一般示例):
def some_calc_func(prev_result, prev_num, current_b):
if current_b == 1:
return prev_result * prev_num / 2
else:
return prev_num + 17
请回复some_calc_func
【问题讨论】:
-
“我需要一种方法来加快这个操作,所以这就是为什么我想要 apply 之类的东西” 注意:When should I ever want to use pandas apply() in my code
-
不一定要应用,我只想要快速完成所描述操作的东西
-
明白,只是想让您知道
apply不是您想要速度时应该首先寻找的东西。
标签: python pandas dataframe vectorization apply