我的数据框具有相同的列名,所以我将它们合并了
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
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
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
我如何获得它们?
答案 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