我有一个包含 xyz 中标记位置的数据框,用于 24 个标记,在 10 秒(100Hz)时间序列的每一帧中。像这样:
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)中提取包含位置的列到新数据帧,并最好为新数据帧指定标记的名称(即 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?看起来很有希望,但我需要结果是一个数据框。我试过使用循环和分组,但我似乎无法找到一种正常工作的方法。
我认为您首先需要Multiindex
按split
列名创建:
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
然后创建dictionary
的DataFrames
通过dict comprehension
:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句