是否可以转换/组合此数据以显示以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
期望的输出:
当v1
,v2
或v3
为索引时,所需输出显示值的总和,tf1
,tf2
和tf3
是dataframe
列。
tf1 tf2 tf3
v1 10 4 1
v2 1 1 0
v3 0 0 0
从上面的例子中可以看出,v1
和tf1
的值是1
的10倍,是v1
和tf2
的4倍。价值1
等。
我尝试使用groupby
尝试执行此操作失败并尝试转置索引和列,即subset[vlist].T
给我v1,v2和v3作为索引,但后来我将时间戳数据作为索引cols不是我想要的。
这可以通过总和或类似的组来完成吗?
感谢您的帮助。
答案 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对象 dot
产品将根据矩阵乘法的定义给出(v1 * tf1).sum(), (v1 * tf2).sum(), ... (v3 * tf3).sum()
。