计算panda数据框

时间:2016-11-13 06:57:15

标签: python pandas

我正试图找出一种比较数据框中不同行的值来计算新列的方法。

我找到了这些方法:

  • 迭代行(我正在寻找矢量化解决方案):

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()

有没有办法让它发挥作用?

谢谢。

1 个答案:

答案 0 :(得分:0)

你想要计算什么?

如果它足够简单,你可以完全矢量化。请注意,您只需将其添加为另一列,而不是单独执行合并步骤。

df["same"] = df[col] == df[col2].shift()

如果它有点复杂,你可以将它分成如上所述的多个步骤吗?这仍然很快。

如果您需要多个列和行,那么您将不得不使用apply逐行或逐列处理,但这非常慢。最糟糕的答案是迭代!你永远不需要这样做。