2015-12-23 90 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