使用指定的cols转换和求和Pandas时间序列数据

时间:2016-12-27 19:41:24

标签: python pandas

是否可以转换/组合此数据以显示以tf作为索引的cols,并且只将cols以vol开头作为剩余的cols?

示例初始数据

                    v1  v2  v3 tf1 tf2 tf3
Timestamp                       
2011-09-01 02:36:00 1   1   0   1   1   0
2011-09-01 03:00:00 1   0   0   1   1   0
2011-09-01 03:36:00 1   0   0   1   1   0
2011-09-01 04:00:00 1   0   0   1   0   0
2011-09-01 04:33:00 1   0   0   1   0   0
2011-09-01 04:39:00 1   0   0   1   0   0
2011-09-01 05:12:00 1   0   0   1   0   0
2011-09-01 05:30:00 1   0   0   1   0   0
2011-09-01 05:36:00 1   0   0   1   1   1
2011-09-01 05:42:00 1   0   0   1   0   0

期望的输出

v1v2v3为索引时,所需输出显示值的总和,tf1tf2tf3dataframe列。

   tf1 tf2 tf3
v1  10  4   1
v2  1   1   0
v3  0   0   0

从上面的例子中可以看出,v1tf1的值是1的10倍,是v1tf2的4倍。价值1等。

我尝试使用groupby尝试执行此操作失败并尝试转置索引和列,即subset[vlist].T给我v1,v2和v3作为索引,但后来我将时间戳数据作为索引cols不是我想要的。

这可以通过总和或类似的组来完成吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

结果是成对列的内积。要获得所有对,您可以使用v-columns和tf-columns的矩阵产品:

df.filter(like="v").T.dot(df.filter(like="tf"))

#  tf1  tf2 tf3
#v1 10    4   1
#v2  1    1   0
#v3  0    0   0
    来自文档的
  • .dot矩阵乘法与DataFrame或Series对象
  • 由于v列被转置,dot产品将根据矩阵乘法的定义给出(v1 * tf1).sum(), (v1 * tf2).sum(), ... (v3 * tf3).sum()