2016-07-21 224 views
4

是否有任何等效的pandas.DataFrame.reset_index对列进行操作,并且能够处理重复列名的情况?熊猫DataFrame reset_index列?

很明显,我可以简单地给列分配新的值,我想知道是否有像df.reset_index这样的方法来做到这一点。

采样输入

pd.DataFrame(np.random.rand(5, 3), columns = ['A', 'A', 'B']) 

    A A B 
0 0.5 0.3 0.9 
1 0.7 0.9 0.3 
2 0.9 0.4 0.8 
3 0.6 0.2 0.9 
4 0.7 0.4 0.6 

预期输出

 0 1 2 
0 0.8 0.1 0.2 
1 0.4 0.2 0.4 
2 0.3 0.3 0.4 
3 0.4 0.1 0.8 
4 1.0 0.9 0.9 

其中0,1,2仅仅是熊猫的默认方式中没有提供的名字来命名的列。

df.renamedf.reindex_axis,现有的方法时,我有重复的列名

回答

3

您可以使用set_axis()方法:

In [54]: df 
Out[54]: 
      A   A   B 
0 0.934900 0.817182 0.166270 
1 0.064543 0.139431 0.249576 
2 0.709349 0.731913 0.965048 
3 0.284955 0.479898 0.496652 
4 0.520749 0.464256 0.999993 

In [55]: df.set_axis(1, range(len(df.columns))) 

In [56]: df 
Out[56]: 
      0   1   2 
0 0.934900 0.817182 0.166270 
1 0.064543 0.139431 0.249576 
2 0.709349 0.731913 0.965048 
3 0.284955 0.479898 0.496652 
4 0.520749 0.464256 0.999993 
2

使用range与柱的长度由shape不起作用:

df.columns = range(df.shape[1]) 
print (df) 
      0   1   2 
0 0.228080 0.884450 0.753401 
1 0.176790 0.741979 0.525305 
2 0.680255 0.730258 0.449681 
3 0.169420 0.660825 0.986554 
4 0.302204 0.040413 0.902899 

通过Treset_index与双变调另一种解决方案参数drop=True

df = df.T.reset_index(drop=True).T 
print (df) 
      0   1   2 
0 0.024846 0.688193 0.887926 
1 0.284681 0.895319 0.142876 
2 0.440834 0.299527 0.762815 
3 0.936967 0.928907 0.642960 
4 0.801077 0.085773 0.866651 
+0

写在的问题,我想避免的列赋新值。 特别是,我想在字典理解的上下文中执行此操作,其中我通过连接时间序列,然后更改列的名称来创建数据框。 – FLab

+0

好的,然后使用第二种解决方案。不幸的是,'reset_index'不适用于列,所以需要双重转置。 – jezrael