如何串联Pandas.数据帧柱

2024-05-23 13:36:52 发布

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

我有一个名为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如下所示:

^{pr2}$

目前还没有索引,但我希望将距离列合并为一个索引,这样列就可以:

          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或{}可能能满足我的需要,但无法理解{a1}。在

也许pandas.DataFrame不是为这样的数据而设计的,我应该使用numpy.genfromtxt并动态地选择我需要的列:如果我动态地选择列,那么使用pandas.DataFrame没有任何好处(因为在这种情况下我没有使用索引)。在

谢谢你的帮助。在


Tags: columns数据距离dataframepandasdfdataraw
2条回答

如果我没弄错,你是从类似的情况开始的:

columns = list(sum(list(zip(['Forces{}'.format(i) for i in range(4)], ['Distances{}'.format(i) for i in range(4)])), ()))
df = pd.DataFrame(np.random.randint(1, 11, size=(100, 8)), columns=columns)

   Forces0  Distances0  Forces1  Distances1  Forces2  Distances2  Forces3  \
0        3           5        8           3        7           4        2   
1        1           4       10           9        9           3        6   
2       10           3        1           3        3           7        8   
3        2           1        3           6       10          10       10   
4        4           2        9           1        3          10        8   

   Distances3  
0           8  
1           5  
2           3  
3           8  
4           8  

您的目标是使不同的Distance列形成一个index,而相应的Forcecolumns remain in place. You could堆栈框架如下:

^{pr2}$

获得:

          Forces0  Forces1  Forces2  Forces3
Distance                                    
9               7        4        6        7
9               7        4        6        7
1               7        4        6        7
6               7        4        6        7
5               1        2        3        1

我用MultiIndex DataFrame解决了这个问题:

  1. 使用pd.read_csv()将每个测试读入单独的数据帧
  2. 使用df = pd.concat(frame_list, keys=test_names)将数据帧合并为一个

我没有在这里写很长的描述,而是写了a Jupyter notebook,比较了MultiIndex方法和只保留一个标准的Python数据帧列表。在

相关问题 更多 >