我有一个名为raw_df
的数据帧:
columns = ['force0', 'distance0', 'force1', 'distance1']
raw_data = [{'force0': 1.2, 'distance0': 0.0, 'force1': 0.5, 'distance1': 0.0},
{'force0': 1.3, 'distance0': 0.1, 'force1': 0.6, 'distance1': 0.0},
{'force0': 1.4, 'distance0': 0.2, 'force1': 0.7, 'distance1': 0.3},
{'force0': 1.5, 'distance0': 0.5, 'force1': 0.8, 'distance1': 0.6}]
raw_df = pd.DataFrame(raw_data, columns=columns)
raw_df
如下所示:
目前还没有索引,但我希望将距离列合并为一个索引,这样列就可以:
force0 force1
distance
0.0 1.2 0.5
0.0 NaN. 0.6
0.1 1.3 NaN
0.2 1.4 NaN
0.3 NaN 0.7
0.5 1.5 NaN
0.6 NaN 0.8
注意,force1中有2个条目表示距离1=0.0。在
指标(距离)不应该被排序:它们会随着时间的变化而增加然后减少,每次测试的初始顺序都很重要。在
Stefan对我描述不清的问题给出了一个令人惊讶的答案,但它似乎用其他数字来填充任何缺失的力(这可能会产生误导,因为在这些测试中没有针对这些距离进行力的测量)。我用np.nan
来表示缺失值,因为我认为pandas
就是这样做的。在
我认为merge
或{
也许pandas.DataFrame
不是为这样的数据而设计的,我应该使用numpy.genfromtxt
并动态地选择我需要的列:如果我动态地选择列,那么使用pandas.DataFrame
没有任何好处(因为在这种情况下我没有使用索引)。在
谢谢你的帮助。在
如果我没弄错,你是从类似的情况开始的:
您的目标是使不同的
^{pr2}$Distance
列形成一个index
,而相应的Force
columns remain in place. You could
堆栈框架如下:获得:
我用MultiIndex DataFrame解决了这个问题:
pd.read_csv()
将每个测试读入单独的数据帧df = pd.concat(frame_list, keys=test_names)
将数据帧合并为一个我没有在这里写很长的描述,而是写了a Jupyter notebook,比较了MultiIndex方法和只保留一个标准的Python数据帧列表。在
相关问题 更多 >
编程相关推荐