2016-02-12 96 views
3

我有两只大熊猫的数据帧:合并和转化两只大熊猫dataframes

一个格式为:

type sum date 
x1 12 01/01/12 
x2 10 01/01/12 
x3 8 01/01/12 
x1 13 02/01/12 
x2 12 02/01/12 
x3 55 02/01/12 
x1 11 03/01/12 
x2 10 03/01/12 
x3 8 03/01/12 

,另一个在格式

total date 
122 01/01/12 
133 02/01/12 
144 03/01/12 

什么是最简单的方法结合这些,以便我可以得到以下输出:

date  x1 x2 x3 total 
01/01/12 12 10 8 122 
02/01/12 13 12 55 133 
03/01/12 11 10 8 144 

我已经尝试了很多功能,变得非常混乱,非常迅速,似乎没有工作。

任何帮助将不胜感激。

+0

,欢迎到堆栈溢出。你可以检查[tour](http://stackoverflow.com/tour)。 – jezrael

回答

3

您可以使用pivotdf1,set_indexdf2然后concat它们在一起。最后,你可以删除columns namereset_index

print df1.pivot(index='date', columns='type', values='sum') 
type  x1 x2 x3 
date     
2012-01-01 12 10 8 
2012-02-01 13 12 55 
2012-03-01 11 10 8 

print df2.set_index('date') 
      total 
date    
2012-01-01 122 
2012-02-01 133 
2012-03-01 144 

df = pd.concat([df1.pivot(index='date', columns='type', values='sum'), 
       df2.set_index('date')], axis=1) 
df.columns.name = None 
df = df.reset_index() 
print df 
     date x1 x2 x3 total 
0 2012-01-01 12 10 8 122 
1 2012-02-01 13 12 55 133 
2 2012-03-01 11 10 8 144 

也许之前你可以转换列dateto_datetimeDataFrames的:

df1['date'] = pd.to_datetime(df1['date']) 
df2['date'] = pd.to_datetime(df2['date']) 
print df1 
    type sum  date 
0 x1 12 2012-01-01 
1 x2 10 2012-01-01 
2 x3 8 2012-01-01 
3 x1 13 2012-02-01 
4 x2 12 2012-02-01 
5 x3 55 2012-02-01 
6 x1 11 2012-03-01 
7 x2 10 2012-03-01 
8 x3 8 2012-03-01 

print df2 
    total  date 
0 122 2012-01-01 
1 133 2012-02-01 
2 144 2012-03-01 
+0

谢谢你,就是我在找的东西。 –

+0

并且不要忘记[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)的答案。谢谢。 – jezrael