I have 2 dataframes, df_products_cp, like this one:
| product_id | version | country |
|---|---|---|
| 1111 | 2 | CO |
| 1111 | 2 | BR |
| 1111 | 2 | MX |
| 2222 | 2 | CO |
| 3333 | 2 | CO |
| 3333 | 2 | MX |
| 4444 | 2 | CO |
| 4444 | 2 | BR |
| 4444 | 2 | MX |
and df_products_ec like this one:
| product_id | version | country |
|---|---|---|
| 1111 | 3 | CO |
| 1111 | 3 | MX |
| 2222 | 3 | CO |
| 4444 | 3 | CO |
| 4444 | 3 | BR |
How can I concatenate both so that I only get a single dataframe like this one, when the product_id/country combination is found in both dataframes?
| product_id | version | country |
|---|---|---|
| 1111 | 2 | CO |
| 1111 | 3 | CO |
| 1111 | 2 | MX |
| 1111 | 3 | MX |
| 2222 | 2 | CO |
| 2222 | 3 | CO |
| 4444 | 2 | CO |
| 4444 | 3 | CO |
| 4444 | 2 | BR |
| 4444 | 3 | BR |
CodePudding user response:
Let us do merge then wide_to_long
out = pd.wide_to_long(df1.merge(df2,on=['product_id','country']),
'version',
['product_id','country'],
j = 'drop',
suffix = '\w ').reset_index().drop(['drop'],axis = 1)
Out[275]:
product_id country version
0 1111 CO 2
1 1111 CO 3
2 1111 MX 2
3 1111 MX 3
4 2222 CO 2
5 2222 CO 3
6 4444 CO 2
7 4444 CO 3
8 4444 BR 2
9 4444 BR 3
