2016-12-27 4 views
3

このデータを変換/結合してインデックスとしてtfで始まる列を表示し、残りの列としてvolで始まる列だけを残しますか?指定された列を使用してパンダの時系列データを変換および合計する

    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 

所望の出力:データ開始

v1v2又はv3インデックスとtf1tf2tf3である場合

所望の出力は、値の合計を示すdataframeあります列。上記の例から分かるよう

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

v1tf21たことv1tf11であったことを10回、4回等

があった私は失敗これを実行しようと試みてきましたgroupbyでインデックスと列を転記しようとしました。すなわち、subset[vlist].Tは私にインデックスとしてv1、v2、v3を与えますが、私は自分が望んでいない列としてタイムスタンプデータを持っています。

これは、合計で類似したグループバイで行うことができますか?

ありがとうございました。

答えて

4

結果は、列のペアの内積です。ペアのすべてを取得するには、V-列とTF-列の行列積行うことができます。ドキュメントから

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を、データフレームと行列の乗算であるかシリーズはオブジェクト
  • v-列が転置されているので、dot製品は、行列乗算の定義に従って(v1 * tf1).sum(), (v1 * tf2).sum(), ... (v3 * tf3).sum()となります。
+2

OMG!私の答えを盗んだ! :-) – piRSquared

+0

これは完璧なおかげです!そして感謝@piRSquared – ade1e

+0

あなたは '.dot'要素がデータに対して何をするのか説明できますか?それはcolとインデックスデータを掛けますか?ありがとう – ade1e

関連する問題