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

Pandas 如何获取具有相同名称的单行列的值?,pandas,dataframe,rows,Pandas,Dataframe,Rows,我有相同列名的数据帧,所以我合并了它们 df1 df2 df3 合并后,生成的数据帧如下所示: 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

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

df1 df2 df3 合并后,生成的数据帧如下所示:

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   num   num
 1  5.5     6    7.5
现在,如果我想为任何一行取所有名为
num\ux
的coulmns的值。那我怎么才能拿到呢

我可以使用以下方法获得具有相同名称的完整列

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']
预期结果应如下所示:

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   num   num
 1  5.5     6    7.5
我怎样才能得到它们???

您需要:


在pandas中,相同的列名称是有问题的,因为不容易先查看lct,然后再查看num_x,因此建议创建
多索引

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
然后用于选择:

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

尝试
df.num_x.loc[:,'1']
?是的,我已经尝试过@576iI进行编辑。。。。我误解了你的问题,再试一次。!没用我只是在jupyter测试了一下,正好相反。df.loc['1']。为了让它回到数据帧,
pd.dataframe(df.loc['1']).T
它如何准确地回答我的问题?
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
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