【发布时间】:2020-09-13 08:08:23
【问题描述】:
有谁知道将 NA 值作为通配符在多列上连接 2 个数据帧的有效方法?
我的用例示例:
我有一个这样的数据框df_a:
stop1 stop2 stop3 stop4 stop5 stop6 stop7
ES IT GB DE AT US CA
ES IT DE CH
还有一个数据框df_p 具有这样的动作模式(可能包含或不包含 NA 值的停止和动作序列):
stop1 act1 stop2 act2 stop3 act3 stop4 act4
ES sell IT
ES sell IT sell DE buy
DE buy CH
我想离开加入 df_a 和 df_p 并使用列匹配分配模式,将空值作为 comodin
在这种情况下,预期的输出应该是:
stop1 act1 stop2 act2 stop3 act3 stop4 act4 stop5 act5 stop6 act6 stop7
ES sell IT sell GB DE buy AT US CA
ES sell IT DE buy CH
第一行匹配第 1 行和第 2 行中的模式,但第 2 行匹配更多行,因此我们分配了该行。第二行匹配路由模式 1 的开头和路由模式 3 的结尾,因此我们将两者都分配。
我正在处理大量数据,因此我需要一种有效的方法来执行此操作。另外,您认为逐行迭代或使用 pd.merge 更好吗?
提前致谢,
阿尔伯托
【问题讨论】:
-
我不明白您的预期输出。为什么第 2 行 col 'act3' 中有 'buy'?该值不会出现在输入数据集的“act3”列中。
-
嗨,戴夫,感谢您的检查。是因为
df_p包含相对位置,所以我需要在每一步都加入它。在这种情况下:df_a.merge(df_p, how= 'left', left_on = ['stop3', 'stop4','stop5','stop6','stop7'], right_on =['stop1', 'stop2','stop3','stop4']) -
即使你这样做了,你仍然不会得到从'act4'到'act3'的'buy'。
-
所以这是主要问题,如何加入将
na值作为通配符
标签: python pandas merge out-of-memory na