【发布时间】: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 抱歉,我无法共享数据,这就是我创建这些虚拟表的原因,以便可以理解问题。我已更改链接访问权限,您现在应该可以查看了。