连接/合并数据框和编辑列名 - Python / Pandas

时间:2015-12-23 20:05:43

标签: python pandas dataframe

我使用以下命令从Python字典中构建了一个DataFrame:

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

这给了我以下框架population

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

在该DataFrame中,我使用以下命令创建了另一个具有移动平均值的文件:

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,但由于某种原因它没有正确运作。

有人可以对它发光吗?

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

您可以join使用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

paths

答案 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