我正试图找出一种比较数据框中不同行的值来计算新列的方法。
我找到了这些方法:
for index, row in df.iterrows():
....
d1 = data.shift()
data.merge(d1[["value col"]], how="inner", left_index=True, right_index=True)
是否可以通过apply方法访问当前数据框:
dataframe.apply(myfunction(row),axis=1)
def my_function(row, current_dataframe)
index = row.name
row_to_compare = current_dataframe.iloc[index-delta]
row["new column"] = calc(row["value], row_to_compare["value"])
return row
将其作为参数传递似乎不起作用:
data.apply(date_diff,axis=1,args=(data))
or
data.apply(lambda row,df: date_diff(row, df),axis=1,args=(data))
继续说:
> ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
有没有办法让它发挥作用?
谢谢。
答案 0 :(得分:0)
你想要计算什么?
如果它足够简单,你可以完全矢量化。请注意,您只需将其添加为另一列,而不是单独执行合并步骤。
df["same"] = df[col] == df[col2].shift()
如果它有点复杂,你可以将它分成如上所述的多个步骤吗?这仍然很快。
如果您需要多个列和行,那么您将不得不使用apply逐行或逐列处理,但这非常慢。最糟糕的答案是迭代!你永远不需要这样做。