获取Pandas DataFrame中行之间的差值

时间:2014-06-02 14:45:41

标签: python pandas

嗨我有像psycopg2这样的结果集

(
(timestamp1, val11, val12, val13, val14),
(timestamp2, val21, val22, val23, val24),
(timestamp3, val31, val32, val33, val34),
(timestamp4, val41, val42, val43, val44),
)

我必须返回行的值之间的差异(timestamp列的异常)。 每行将减去前一行值。 第一行是

timestamp, 'NaN', 'NaN' ....

然后必须将其作为通用对象返回 即类似于以下对象的数组

Group(timestamp=timestamp, rows=[val11, val12, val13, val14]

我打算用Pandas来做差异。 类似下面的东西在值

上可以正常工作
df = DataFrame().from_records(data=results, columns=headers)
diffs = df.set_index('time', drop=False).diff()

但是diff也会在timestamp列上执行,而我无法忽略列 保留原始时间戳列。

此外,我还不确定将数据转换为我的返回格式是否有效 正如Pandas建议不要进行行访问

以我所需的输出格式获得结果集差异的快速方法是什么?

1 个答案:

答案 0 :(得分:3)

你为什么设置drop=False?这会将时间戳放在索引中(diff不会触及它们),但也会将时间戳的副本保留为正确的列,以便diff处理。

我认为这会做你想做的事情:

diffs = df.set_index('time').diff().reset_index()

由于您提到了psycopg2,请查看几天前发布的pandas 0.14的文档,其中包含改进的SQL功能,包括对postgresql的新支持。您可以直接在数据库和pandas DataFrame之间进行读写。