如何获得具有相同名称的单行列的值?

时间:2018-10-02 12:55:46

标签: pandas dataframe rows

我的数据框具有相同的列名,所以我将它们合并了

df1

        wave   num   stlines 
0    4050.32   3.0  0.282690
1    4208.98   5.5  0.490580
2    4374.94   9.0  0.714830
3    4379.74   9.0  0.314040
4    4398.01  14.0  0.504150
5    4502.21   8.0  0.562780

df2

        wave  num  stlines 
0    4050.32    3  0.28616 
1    4208.98    6  0.48781 
2    4374.94    9  0.71548 
3    4379.74   10  0.31338 
4    4398.01   15  0.49950  
5    4502.21    9  0.56362 

df3

        wave   num   stlines 
0    4050.32   3.0  0.282690
1    4208.98   7.5  0.490580
2    4374.94   9.0  0.714830
3    4379.74   9.0  0.314040
4    4398.01  14.0  0.504150
5    4502.21   8.0  0.562780

合并后,结果数据帧如下:

df=pd.merge(df1,df2,df3, on='wave',axis=1,join='inner')


      wave   num_x  stlines_x  num_x  stlines_x  num_x  stlines_x 
0    4050.32   3.0  0.282690    3     0.28616      3.0  0.282690
1    4208.98   5.5  0.490580    6     0.48781      5.5  0.490580 
2    4374.94   9.0  0.714830    9     0.71548      9.0  0.714830
3    4379.74   9.0  0.314040   10     0.31338      9.0  0.314040
4    4398.01  14.0  0.504150   15     0.49950     14.0  0.504150
5    4502.21   8.0  0.562780    9     0.56362      8.0  0.562780

所以现在,如果我想为任何行取所有名称为num_x的库伦的值。那我怎么得到他们呢?

我可以使用以下

获取具有相同名称的完整列
df.num_x

    num   num   num
 0    3    3.0    3
 1  5.5      6  7.5 
 2    9    9.0    9
 3   10   14.0   10 
 4   15    8.0   15
 5    9    3.0    9

但是当我尝试对单行“ 1”执行相同操作时,它就没用了:

df.num_x['1']

所需的结果应如下所示:

    num   num   num
 1  5.5     6    7.5

我如何获得它们?

1 个答案:

答案 0 :(得分:1)

您需要DataFrame.loc

df.loc[1, 'num_x']

在大熊猫中,相同的列名称是有问题的,因为第一,第二num_x不容易查找,因此建议创建MultiIndex

dfs = [df1, df2, df3]

df = pd.concat([x.set_index('wave') for x in dfs], 
               axis=1, 
               keys=['df1','df2','df3'], join='inner')
print (df)
          df1          df2            df3         
          num  stlines num  stlines   num  stlines
wave                                              
4050.32   3.0  0.28269   3  0.28616   3.0  0.28269
4208.98   5.5  0.49058   6  0.48781   7.5  0.49058
4374.94   9.0  0.71483   9  0.71548   9.0  0.71483
4379.74   9.0  0.31404  10  0.31338   9.0  0.31404
4398.01  14.0  0.50415  15  0.49950  14.0  0.50415
4502.21   8.0  0.56278   9  0.56362   8.0  0.56278

然后使用xs进行选择:

df1 = df.xs('num', axis=1, level=1)
print (df1)
          df1  df2   df3
wave                    
4050.32   3.0    3   3.0
4208.98   5.5    6   7.5
4374.94   9.0    9   9.0
4379.74   9.0   10   9.0
4398.01  14.0   15  14.0
4502.21   8.0    9   8.0