希望从数据框中的顶行创建列名称

问题描述 投票:0回答:1

我有一个如下所示的数据框:

    0       1       2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19
0   9.0     8.0     7.0     6.0     5.0     4.0     3.0     2.0     1.0     0.0     0.0     1.0     2.0     3.0     4.0     5.0     6.0     7.0     8.0 9   .0
1   1.0     1.0     1.0     1.0     1.0     1.0     1.0     1.0     1.0     1.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
2   4484.75 4485.0  4485.25 4485.5  4485.75 4486.0  4486.25 4486.5  4486.75 4487.0  4487.25 4487.5  4487.75 4488.0  4488.25 4488.5  4488.75 4489.0  4489.25 4489.5
3   4484.75 4485.0  4485.25 4485.5  4485.75 4486.0  4486.25 4486.5  4486.75 4487.0  4487.25 4487.5  4487.75 4488.0  4488.25 4488.5  4488.75 4489.0  4489.25 4489.5
4   4484.75 4485.0  4485.25 4485.5  4485.75 4486.0  4486.25 4486.5  4486.75 4487.0  4487.25 4487.5  4487.75 4488.0  4488.25 4488.5  4488.75 4489.0  4489.25 4489.5
5   4484.75 4485.0  4485.25 4485.5  4485.75 4486.0  4486.25 4486.5  4486.75 4487.0  4487.25 4487.5  4487.75 4488.0  4488.25 4488.5  4488.75 4489.0  4489.25 4489.5

前两行是其余行的标识值(第一行称为

Position
,第二行称为
Side
)。 我想创建列名称,并将这些行作为标识符,这将允许 df 轻松地沿行和列进行切片。

例如,我希望能够根据列标题值过滤 df,如下所示:

df.loc[:,[(df.Position.isin(0,1,2,3,4)) & (df.Side==0)]

将返回值的子集:

    10      11      12      13      14
2   4487.25 4487.5  4487.75 4488.0  4488.25
3   4487.25 4487.5  4487.75 4488.0  4488.25
4   4487.25 4487.5  4487.75 4488.0  4488.25
5   4487.25 4487.5  4487.75 4488.0  4488.25

我尝试过

set_axis
属性,但这不允许引用列名称。 我该如何实现这一目标?

python pandas
1个回答
0
投票

使用 pandas MultiIndex 作为多索引列:

df.columns = pd.MultiIndex.from_arrays([df.iloc[0], df.iloc[1]], names=['Position', 'Side'])

df = df.drop([0, 1])

然后您可以使用这些索引过滤

df

df.iloc[:, (df.columns.get_level_values('Side') == 0) & (df.columns.get_level_values('Position').isin([0, 1, 2, 3, 4]))]
© www.soinside.com 2019 - 2024. All rights reserved.