Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫展平非重叠列上的层次索引_Python_Pandas - Fatal编程技术网

Python 熊猫展平非重叠列上的层次索引

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')

我有一个dataframe,我将索引设置为dataframe的一列。这将创建分层列索引。我想将这些列展平到一个级别。但是,与此问题类似,列不重叠(即“id”不在层次索引的级别0,其他列在索引的级别1)

所需输出为展平列,如下所示:

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