嗨,我有一个来自 psycopg2 的结果集,如下所示
(
(timestamp1, val11, val12, val13, val14),
(timestamp2, val21, val22, val23, val24),
(timestamp3, val31, val32, val33, val34),
(timestamp4, val41, val42, val43, val44),
)
我必须返回行值之间的差异(时间戳列除外)。 每行都会减去前一行的值。 第一行是
时间戳,'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 也在时间戳列上执行,我无法让它忽略列 保留原始时间戳列。
此外,我不确定将数据转换为我的返回格式是否有效 正如 Pandas 建议不要进行行访问
如何快速获取所需输出格式的结果集差异?
最佳答案
为什么设置drop=False
?这会将时间戳放入索引中(其中它们不会被 diff
触及),但也会留下时间戳的副本作为适当的列,以供 diff
处理。
我认为这会做你想要的:
diffs = df.set_index('time').diff().reset_index()
既然你提到了 psycopg2,那就看一下几天前发布的 pandas 0.14 的文档,它的特点是改进了 SQL 功能,包括对 postgresql 的新支持。您可以在数据库和 pandas DataFrames 之间直接读写。
关于python - 获取 Pandas DataFrame 中行之间的差异值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23997281/