合并和转换两个pandas数据框架

3

I have two pandas data frames:

One in the format:

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

我尝试了很多函数,但很快就变得非常混乱,并且似乎无法正常工作。

如有任何帮助将不胜感激。


欢迎来到 Stack Overflow。您可以查看 tour - jezrael
1个回答

3
你可以使用pivot和数据框 df1set_index 和数据框 df2,然后将它们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

在你将两个 DataFramesdate 列转换为日期格式之前,也许需要使用 to_datetime 方法进行转换:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接