2015-12-23 93 views
1

我建立了一个数据帧从一个Python字典,用下面的命令:串联/合并数据帧和编辑列名 - 的Python /熊猫

population=pd.DataFrame(population.items(),columns=['Date','population']).set_index('Date').sort_index(ascending=True) 

这给了我下面的框架​​:

    population 
Date      
2015-08     69 
2015-09     65 
2015-10     65 
2015-11     66 
2015-12     71 

指出,数据帧我创建另一个与其移动平均值,使用下面的命令的:

population_movav=pd.rolling_mean(population,10) 

这给了我下面的框架population_movav

    population 
Date      
2015-08    68.0 
2015-09    69.9 
2015-10    71.6 
2015-11    71.1 
2015-12    71.2 

我想将它们结合起来,使他们得到这样的:

   population population_movav 
Date      
2015-08     69    68.0 
2015-09     65    69.9 
2015-10     65    71.6 
2015-11     66    71.1 
2015-12     71    71.2 

合成,我需要将它们串联和改变变量的列名population_movav。尝试了pd.concat,但由于某种原因,它没有正确的工作。

有人可以照亮它吗?

回答

2

您需要使用pd.concataxis=1,然后你的最后一列重命名为“population_movav”:

In [27]: df1 
Out[27]: 
     population 
Date    
2015-08   69 
2015-09   65 
2015-10   65 
2015-11   66 
2015-12   71 

In [28]: df2 
Out[28]: 
     population 
Date    
2015-08  68.0 
2015-09  69.9 
2015-10  71.6 
2015-11  71.1 
2015-12  71.2 

In [30]: df3 = pd.concat([df1, df2], axis=1) 

In [31]: df3.columns = ['population', 'population_movav'] 
Out[31]: 
     population population_movav 
Date       
2015-08   69  68.0 
2015-09   65  69.9 
2015-10   65  71.6 
2015-11   66  71.1 
2015-12   71  71.2 

编辑

如果您只需要更改最后一栏,你可以做到以下几点:

df3.columns = df3.columns[:-1].tolist() + ['population_movav'] 
+0

你介意最后一列中添加重命名命令? – abutremutante

1

您可以使用joinrsuffix

print population 
      population 
Date     
2015-08-01   69 
2015-09-01   65 
2015-10-01   65 
2015-11-01   66 
2015-12-01   71 

print population_movav 
      population 
Date     
2015-08-01  68.0 
2015-09-01  69.9 
2015-10-01  71.6 
2015-11-01  71.1 
2015-12-01  71.2 

p = population.join(population_movav, rsuffix="_movav") 
print p 
      population population_movav 
Date          
2015-08-01   69    68.0 
2015-09-01   65    69.9 
2015-10-01   65    71.6 
2015-11-01   66    71.1 
2015-12-01   71    71.2 
1

你可以简单地通过在分配中按名称引用它添加一个新的列:

population['population_movav'] = pd.rolling_mean(population, 2, 1) 

给你

  population population_movav 
Date 
2015-08   69    69.0 
2015-09   65    67.0 
2015-10   65    65.0 
2015-11   66    65.5 
2015-12   71    68.5 
+0

如果可行,这是最好的答案。 Mayby你可以将列名更改为'population_movav' – jezrael

+0

我编辑标签以匹配示例 – pneumatics