首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在熊猫中合并两个数据会导致重复的值。

在熊猫中合并两个数据会导致重复的值。
EN

Stack Overflow用户
提问于 2017-04-28 10:01:01
回答 2查看 58关注 0票数 0

我有两个df:

m2 =

代码语言:javascript
复制
2014-02     1
2014-09     1
2014-11     1
...
2016-11    10
2016-12     9
2017-01     9
2017-02    10
2017-04     2
Name: Start Date2, dtype: int64

m1 =

代码语言:javascript
复制
2010-09     1
2010-12     1
2011-03     1
2011-04     1
2011-05     2
...
2016-11     8
2016-12    12
2017-01     7
2017-02     5
2017-04     1
Name: Start Date, dtype: int64

我想要的是这样的一个df : merged =

代码语言:javascript
复制
2010-09     1     NaN
2010-12     1     NaN
...
2017-02     5     10
2017-04     1     2

我尝试了多个版本(它们是系列的,所以我首先将它们转换为dataframes ):

代码语言:javascript
复制
result = pd.DataFrame(m1).reset_index().merge(pd.DataFrame(m2), left_on="Start Date", right_on="Start Date2", how='inner').set_index('index')
result.to_csv("out.csv", sep='\t', encoding='utf-8')

但我得到了这样的东西:

代码语言:javascript
复制
2010-09 1   1
2010-09 1   1
...   
2016-12 12  12
2016-12 12  12
2016-09 8   8
2016-11 8   8

如果我尝试使用outer (这正是我想要的),我会得到:

代码语言:javascript
复制
2016-12 12.0    12.0
2016-12 12.0    12.0
2016-06 7.0 
2016-08 7.0 
2017-01 7.0 
2016-09 8.0 8.0
2016-11 8.0 8.0
        10.0
        10.0
        10.0
        10.0
        10.0
        17.0
        9.0
        9.0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-28 12:08:36

merge的语法是

代码语言:javascript
复制
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False)

所以你就可以

代码语言:javascript
复制
pd.merge(m1, m2, how='outer, left_index=True, right_index=True)

如果m1m2是系列,则可能需要在pd.merge-call中用m1.to_frame()替换它们。

不需要reset_index

票数 1
EN

Stack Overflow用户

发布于 2017-04-28 11:29:27

我认为reset_index()带来了问题,即将名称'Start Date‘和'Start Date2’给数据列名,而不是给索引值。

尝试以下几点:

代码语言:javascript
复制
m1 = pd.DataFrame(m1).reset_index().rename(columns={'index':'Start Date','Start Date':'values'})
m2 = pd.DataFrame(m2).reset_index().rename(columns={'index':'Start Date2','Start Date2':'values2'})
m1.merge(m2,left_on= 'Start Date',right_on='Start Date2',how='outer')

那应该就行了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43677434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档