嗨我有像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建议不要进行行访问
以我所需的输出格式获得结果集差异的快速方法是什么?
答案 0 :(得分:3)
你为什么设置drop=False
?这会将时间戳放在索引中(diff
不会触及它们),但也会将时间戳的副本保留为正确的列,以便diff
处理。
我认为这会做你想做的事情:
diffs = df.set_index('time').diff().reset_index()
由于您提到了psycopg2,请查看几天前发布的pandas 0.14的文档,其中包含改进的SQL功能,包括对postgresql的新支持。您可以直接在数据库和pandas DataFrame之间进行读写。