Python 熊猫展平非重叠列上的层次索引
我有一个dataframe,我将索引设置为dataframe的一列。这将创建分层列索引。我想将这些列展平到一个级别。但是,与此问题类似,列不重叠(即“id”不在层次索引的级别0,其他列在索引的级别1) 所需输出为展平列,如下所示:Python 熊猫展平非重叠列上的层次索引,python,pandas,Python,Pandas,我有一个dataframe,我将索引设置为dataframe的一列。这将创建分层列索引。我想将这些列展平到一个级别。但是,与此问题类似,列不重叠(即“id”不在层次索引的级别0,其他列在索引的级别1) 所需输出为展平列,如下所示: id A B 101 3 x 102 5 y 在数据帧中始终会有一个索引。如果不将“id”设置为索引,则它将与其他列处于同一级别,并且熊猫将为索引填充一个从0开始的递增整数 df = pd.DataFrame([(101,3,'x')
id A B
101 3 x
102 5 y
在数据帧中始终会有一个索引。如果不将“id”设置为索引,则它将与其他列处于同一级别,并且熊猫将为索引填充一个从0开始的递增整数
df = pd.DataFrame([(101,3,'x'), (102,5,'y')], columns=['id', 'A', 'B'])
In[52]: df
Out[52]:
id A B
0 101 3 x
1 102 5 y
索引在那里,因此您可以对原始数据帧进行切片。这样
df.iloc[0]
Out[53]:
id 101
A 3
B x
Name: 0, dtype: object
假设您希望ID作为索引,ID作为列,这是非常冗余的,您可以这样做:
df = pd.DataFrame([(101,3,'x'), (102,5,'y')], columns=['id', 'A', 'B'])
df.set_index('id', inplace=True)
df['id'] = df.index
df
Out[55]:
A B id
id
101 3 x 101
102 5 y 102
使用此选项,您可以按“id”进行切片,例如:
df.loc[101]
Out[57]:
A 3
B x
id 101
Name: 101, dtype: object
但这与我们的信息相同:
df = pd.DataFrame([(101,3,'x'), (102,5,'y')], columns=['id', 'A', 'B'])
df.set_index('id', inplace=True)
df.loc[101]
Out[58]:
A 3
B x
Name: 101, dtype: object
鉴于:
对于打印purdy,您可以通过重置索引生成数据帧的副本,并使用:
然后使用格式化选项,以便输出满足您的需要:
>>> fmts=[lambda s: u"{:^5}".format(str(s).strip())]*3
>>> print df2.reset_index().to_string(index=False, formatters=fmts)
id A B
101 3 x
102 5 y
你误解了你所看到的
A B
id
101 3 x
102 5 y
未向您显示分层列索引id
是行索引的名称。为了向您显示索引的名称,pandas正在为您放置该空间
你问题的答案取决于你真正想要什么或需要什么
由于df
是,您可以按照您想要的方式将其转储到csv
:
print(df.to_csv(sep='\t'))
id A B
101 3 x
102 5 y
或者您可以更改
df
,使其以您想要的方式显示
print(df.rename_axis(None))
A B
101 3 x
102 5 y
请不要这样做
我用它来演示如何操纵 我也可以保持索引的原样,但同时操作列和行索引名以打印您想要的方式
print(df.rename_axis(None).rename_axis('id', 1))
id A B
101 3 x
102 5 y
但是这已经命名了列的索引id
,这毫无意义。Hi您能帮我回答吗
print(df.to_csv(sep='\t'))
id A B
101 3 x
102 5 y
print(df.to_csv())
id,A,B
101,3,x
102,5,y
print(df.rename_axis(None))
A B
101 3 x
102 5 y
print(df.rename_axis(None).rename_axis('id', 1))
id A B
101 3 x
102 5 y