2017-07-27 122 views
1

我有一個數據框包含xyz中的標記位置,24個標記,在10秒(100Hz)時間序列的每個幀中。就像這樣:基於部分名稱從數據框中提取3列組

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_x,LHEE_y和LHEE_z)新dataframes從一個標記位置列,preferrably給新dataframes標記的名稱(即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的答案很可能是你想要的。請,[你可以刪除你的簽名?你的「乾杯,Elise」](https://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)。 – Kanak

回答

2

我想你需要先通過split列名創建Multiindex

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

相關問題