![](/img/trans.png)
[英]Concatenating data frames into a pandas dataframe with pre set row names python
[英]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.concat
与axis=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']
您可以将join
与rsuffix
一起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.