基于部分名称从dataframe中提取3列组

2024-04-24 12:09:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它包含xyz中的标记位置,在10秒(100Hz)时间序列的每一帧中有24个标记。像这样:

    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\ux、LHEE\uy和LHEE\uz)中提取包含位置的列到新的数据帧,并优先为新的数据帧提供标记的名称(即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? 看起来很有希望,但我需要的结果是一个数据帧。 我尝试过使用循环和分组,但似乎找不到一种能正常工作的方法。你知道吗


Tags: 数据方法标记pos名称时间序列xyz
1条回答
网友
1楼 · 发布于 2024-04-24 12:09:38

我认为您需要首先通过^{}列名创建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创建dictionaryDataFrames

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

相关问题 更多 >