【问题标题】:Merging multiple dataframes based on a column value基于列值合并多个数据框
【发布时间】:2020-05-21 14:38:14
【问题描述】:

我有一个数据框 df1

symbol  date        .    .    .     close   .     1d     2d      3d      5d   10d   20d
a     01/02/20120.  .    .    .      100    .     2      2.5    4.1     1.9   4.65  9.12
a     01/02/20120.  .    .    .      60     .     1.1    2.3    2.1     4.9   3.62  7.10
.
.
.
ab    01/02/20120.  .    .    .      55     .    8      2.15   7.8     1.9   4.65  9.12
ab    01/02/20120.  .    .    .      22     .    4.4    2.5    1.1     1.9   4.65  9.12
.
.

ac    01/02/20120.  .    .    .      67     .    2      2.5.   4.1     1.9   4.65  9.12
.
.
.

和一个数据框 df2

symbol  .   .   .   .   release_date    release_time    .   .    .   .  .   . 
a       .   .   .   .   01/02/20120       a             .   .    .   .  .   .
a       .   .   .   .   01/05/20120       b             .   .    .   .  .   .
a       .   .   .   .   01/09/20120       a             .   .    .   .  .   .
a       .   .   .   .   01/011/2020       b             .   .    .   .  .   .
ab      .   .   .   .   01/02/20120       a             .   .    .   .  .   .
ab      .   .   .   .   01/05/20120       a             .   .    .   .  .   .
ac      .   .   .   .   01/18/20120       a             .   .    .   .  .   .
ad      .   .   .   .   01/20/20120       b             .   .    .   .  .   .

我想向 df2 添加新列,这样

如果 release_time = a,则在 df1 中搜索与 df2 具有相同 release_date 的条目,并为那个特定的日期。我不希望 df1 中的其他列成为数据框的一部分并同时保留 df2 的所有列。

如果 release_time = b,则关闭之前日期的值,如果不存在,我想将 NA 添加到列中

预期输出:

symbol  .   .   .   .   release_date    release_time    .   .    .   .  .   .  close   1d  2d  3d  5d  10d  20d 
a       .   .   .   .   01/02/20120       a             .   .    .   .  .   .   
a       .   .   .   .   01/05/20120       b             .   .    .   .  .   .
a       .   .   .   .   01/09/20120       a             .   .    .   .  .   .
a       .   .   .   .   01/011/2020       b             .   .    .   .  .   .
ab      .   .   .   .   01/02/20120       a             .   .    .   .  .   .
ab      .   .   .   .   01/05/20120       a             .   .    .   .  .   .
ac      .   .   .   .   01/18/20120       a             .   .    .   .  .   .
ad      .   .   .   .   01/20/20120       b             .   .    .   .  .   .

我试着用

merged_left = pd.merge(left=df2, right=df1, how='left', left_on='release_date', right_on='date')
merged_left

这为我提供了在 df2 中合并的数据,我不确定如何为 release_time = a 或 b 添加过滤器。

谁能帮我解决这个问题

更新 - 这是数据框外观的链接:Google Sheet link

谢谢

【问题讨论】:

  • 您能否让您的描述更笼统并包含代码,以便我们可以快速重现您正在处理的内容?例如。给我们提供df1 = pd.DataFrame(data={'date': ['01/02/20120','01/02/20120'],'close':[100,60]})
  • 嗨@Eric 我已将谷歌表格链接添加到问题的更新中。
  • 谷歌表格不能公开访问,这仍然需要我们创建 DataFrame。
  • @Eric 抱歉,我无法共享数据,这就是我创建这些虚拟表的原因,以便可以理解问题。我已更改链接访问权限,您现在应该可以查看了。

标签: python pandas numpy


【解决方案1】:

不确定我是否理解您想要做什么,但要为日期制作过滤器,而不是将整个数据框传递给 merge() 函数,您应该传递类似 df[ df['release_date'] == a]

的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2020-11-30
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多