2017-07-27 19 views
1

私は、10秒(100Hz)の時系列データのすべてのフレームで、24個のマーカーに対してxyzのマーカー位置を含むデータフレームを持っています。このように:部分名に基づいてデータフレームから3列のグループを抽出する

私は新しいデータフレームまでの時間(すなわちLHEE_x、LHEE_yとLHEE_z)で1つのマーカーから位置を含む列を抽出し、できれ新しいデータフレームにマーカーの名前を与えたい
LHEE_x LHEE_y LHEE_z LTOE_x LTOE_y LTOE_z RHEE_x RHEE_y 
0 -347.013 526.914 27.256 -138.267 578.015 39.859 -352.402 297.541 
1 -347.035 526.934 27.261 -138.271 578.074 39.874 -352.409 297.548 
2 -347.041 526.933 27.265 -138.260 578.073 39.898 -352.402 297.533 
3 -347.030 526.928 27.251 -138.242 578.079 39.905 -352.427 297.535 
4 -347.029 526.939 27.222 -138.244 578.072 39.915 -352.445 297.525 
..... 

(すなわちLHEE )。

また、私が行う機能を作りたいと思う

..私は私が

LHEE=pos_xyz.iloc[:,0:3] 
or  
LHEE=pos_xyz['LHEE_x','LHEE_y','LHEE_z'] 

で「手動」これを行うことができます知っているが、私は、マーカーのトンを持っているので、これは面倒だろう

これにより、私はそれをさまざまなマーカーのマーカー位置を含むデータフレームに使用できます。

これを行う最も効率的な方法は何でしょうか? この質問 How to select DataFrame columns based on partial matching? は有望だったようですが、結果がデータフレームである必要があります。 ループとグループ化を試してみましたが、正しく動作する方法が見つからないようです。

+1

完全に再現可能な例を読者に提供するあなたのチャンスを最大にします答えを得る。例えば。 'import pandas'を使用して、dfのコピー貼り文字列バージョンで始めることを義務付けるのではなく、データフレーム(df)で直接演奏できるようにするコードを提供します。 – Kanak

+0

申し訳ありませんが、あなたが最初に質問を投稿することを提案する方法がわかりません。私はdfを提供して満足しているだろう:) –

+0

問題はありません。次回はこれを覚えておいてください。ところで、jezraelの答えはあなたが望むものになる可能性が非常に高いです。してください、あなたの署名を削除できますか?あなたの "乾杯、エリーゼ"](https://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)。 – Kanak

答えて

2

私はあなたが最初Multiindexsplitによって、列名を作成する必要があると思う:

df.columns = df.columns.str.split('_', expand=True) 
print (df) 
     LHEE      LTOE      RHEE   
     x  y  z  x  y  z  x  y 
0 -347.013 526.914 27.256 -138.267 578.015 39.859 -352.402 297.541 
1 -347.035 526.934 27.261 -138.271 578.074 39.874 -352.409 297.548 
2 -347.041 526.933 27.265 -138.260 578.073 39.898 -352.402 297.533 
3 -347.030 526.928 27.251 -138.242 578.079 39.905 -352.427 297.535 
4 -347.029 526.939 27.222 -138.244 578.072 39.915 -352.445 297.525 

をそしてdict comprehensionによってDataFramesdictionaryを作成します。

dfs = {x:df[x] for x in df.columns.levels[0]} 
print (dfs) 
{'RHEE':   x  y 
0 -352.402 297.541 
1 -352.409 297.548 
2 -352.402 297.533 
3 -352.427 297.535 
4 -352.445 297.525, 'LTOE':   x  y  z 
0 -138.267 578.015 39.859 
1 -138.271 578.074 39.874 
2 -138.260 578.073 39.898 
3 -138.242 578.079 39.905 
4 -138.244 578.072 39.915, 'LHEE':   x  y  z 
0 -347.013 526.914 27.256 
1 -347.035 526.934 27.261 
2 -347.041 526.933 27.265 
3 -347.030 526.928 27.251 
4 -347.029 526.939 27.222} 

print (dfs['LHEE']) 
     x  y  z 
0 -347.013 526.914 27.256 
1 -347.035 526.934 27.261 
2 -347.041 526.933 27.265 
3 -347.030 526.928 27.251 
4 -347.029 526.939 27.222 
+0

ありがとう、これは完全に働いた。今すぐ:辞書について学ぶために... –

+0

嬉しいことに、 'dfs ['LHEE']'は 'df'と同じなので、同じ関数とメソッドが完全に機能します。素敵な日です! – jezrael

+1

これは賢いです! ++ :) – MaxU

関連する問題