熊猫-如果第二个字符串包含第一个字符串,则合并数据帧

时间:2019-07-03 08:11:13

标签: python-3.x

我尝试执行一个“ excel v lookup”以基于一个值合并2个df。如果第一个值位于第二个值中,则进行合并(请参见下面的ex)。我在这里尝试了很多选择,但没有人能解决。我尝试将日期放在WO_ID列中的相应数字上,并保留此列中的所有数字。

我知道如何转换日期中的字符串,但是我让*和A也许可以编写完整的代码。

所以:

Data Frame 1: cms

WO_ID          Status
14163-2018  1
14142-2018  1
2092-2019   2
2093-2019   2
11922-2019  1



Data Frame 2: df

WO                    Start     Finish
2092-2019; 2093-2019      12-07-19* 18-07-19
11922-2019            02-07-2019A   28-07-19*
14142-2018; 14163-2018    06-07-19  28-07-19*

除了尝试了许多其他代码外,我认为这更接近结果……但显然不起作用。

我尝试创建一个包含合并的cms + db的第3个数据库(我们称之为“全部”)

这是代码:

all = pd.merge(cms,df,left_on='WO_ID',right_on='WO',how='left',indicator=True)

这显然是不完整的:

WO_ID         Statu     WO      Start         Finish        _merge
14163-2018  1   NaN     NaT           NaT          left_only
14142-2018  1   NaN     NaT           NaT          left_only
2092-2019   2   NaN     NaT       NaT          left_only
2093-2019   2   NaN     NaT       NaT          left_only
11922-2019  1   11922-2019  02-07-2019A   28-07-19* both

我尝试获得这样的输出:

WO_ID        Status  WO                      Start    Finish    _merge
14163-2018  1    14142-2018; 14163-2018  06-07-19    28-07-19* whatever..
14142-2018  1    14142-2018; 14163-2018  06-07-19    28-07-19* whatever..
2092-2019   2    2092-2019; 2093-2019    12-07-19*   18-07-19  whatever..
2093-2019   2    2092-2019; 2093-2019    12-07-19*   18-07-19  whatever..
11922-2019  1    11922-2019              02-07-2019A 28-07-19* both

但是我不知道如何。

请支持。 :)

谢谢。

2 个答案:

答案 0 :(得分:0)

数据框1:厘米

enter image description here

数据框2:df

enter image description here

公式和结果 enter image description here

预期结果

enter image description here

答案 1 :(得分:0)

合并不起作用的原因是,在两个数据框中您的密钥都不相同。您可以做的一种方法是为第二个数据帧df创建一个新密钥。您可以使用以下解决方案https://stackoverflow.com/a/39946744/8329101

df['key'] = df['WO']
df_exploded = tidy_split(df, 'key', sep=';')

然后应用加入操作

all = pd.merge(cms,df_exploded ,left_on='WO_ID',right_on='key',how='left')