首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫连接两个数据,而一个列连接,另一个仍然保留?

熊猫连接两个数据,而一个列连接,另一个仍然保留?
EN

Stack Overflow用户
提问于 2020-07-01 08:28:47
回答 1查看 29关注 0票数 1

输入

代码语言:javascript
复制
df1

id      date      v1
a    2020-1-1     1
a    2020-1-2     2
b    2020-1-4     10
b    2020-1-22    30
c    2020-2-4     10
c    2020-2-22    30


df2

id      date      v1
a    2020-1-3     1
b    2020-1-7     12
b    2020-1-22    13
c    2020-2-10    15
c    2020-2-22    60

目标

代码语言:javascript
复制
id      date      v1   v2
a    2020-1-1     1    0
a    2020-1-2     2    0
a    2020-1-3     0    1
b    2020-1-4     10   0
b    2020-1-7     0    12
b    2020-1-22    30   13
c    2020-2-4     10   0
c    2020-2-10     0   15
c    2020-2-22    30   60

详情如下:

只有两个数据格式,对于每个unique.

  • Concat,日期是两个基于id的数据格式,每个id包含来自两个dataframe

  • new合并数据的日期值包含v1和v2列,而df1df2中的日期返回原始值,而日期仅在df1df2中返回,如果日期上没有值,则返回原始值。H 220F 221

Try

我已经搜索了合并文件,但是我找不到答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 08:32:31

首先通过to_datetime将列转换为datetimes以获得正确的排序,然后将DataFrame.merge与外部联接并为df2重命名列v1,以避免输出中的v1_xv1_y列,用DataFrame.fillna替换缺失的值,并按DataFrame.sort_values对输出进行排序。

代码语言:javascript
复制
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])

df = (df1.merge(df2.rename(columns={'v1':'v2'}), on=['id','date'], how='outer')
         .fillna(0)
         .sort_values(['id','date']))
print (df)
  id       date    v1    v2
0  a 2020-01-01   1.0   0.0
1  a 2020-01-02   2.0   0.0
6  a 2020-01-03   0.0   1.0
2  b 2020-01-04  10.0   0.0
7  b 2020-01-07   0.0  12.0
3  b 2020-01-22  30.0  13.0
4  c 2020-02-04  10.0   0.0
8  c 2020-02-10   0.0  15.0
5  c 2020-02-22  30.0  60.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62672721

复制
相关文章

相似问题

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