Pandas在非重叠列上展平层次索引

2024-06-16 14:43:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,我将索引设置为dataframe的一列。这将创建一个分层列索引。我要将列展平到一个级别。但是,与这个问题-Python Pandas - How to flatten a hierarchical index in columns类似,列不重叠(即'id'不在层次索引的0级,其他列在索引的级别1)。在

df = pd.DataFrame([(101,3,'x'), (102,5,'y')], columns=['id', 'A', 'B'])
df.set_index('id', inplace=True)

      A    B
id
101   3    x
102   5    y

所需的输出是扁平列,如下所示:

^{pr2}$

Tags: columnstoiniddataframepandasdfindex
3条回答

给予:

>>> df2=pd.DataFrame([(101,3,'x'), (102,5,'y')], columns=['id', 'A', 'B'])
>>> df2.set_index('id', inplace=True)
>>> df2
     A  B
id       
101  3  x
102  5  y

对于打印purdy,可以使用reset the index并使用.to_string生成一个DataFrame的副本:

^{pr2}$

然后使用格式化选项,以便输出符合您的需要:

>>> 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中:

^{pr2}$
print(df.to_csv())

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

但是这将列命名为'indexid,这是没有意义的。在

数据帧中总是有一个索引。如果不将'id'设置为索引,它将与其他列处于同一级别,pandas将为索引填充一个从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

索引在那里,所以你可以切片原始数据帧。这样做了

^{pr2}$

假设您希望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

相关问题 更多 >