繁体   English   中英

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

[英]Concatenating/merging data frames and editing column names in Python/Pandas

我用 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但由于某种原因,它无法正常工作。

我怎样才能做到这一点?

您需要将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']

您可以将joinrsuffix一起rsuffix

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

您可以通过在赋值中按名称引用来添加新列:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM