I have 2 data frame, i need to combine like below
This is my Data frame 1
This is my Data frame 2
i want my output as below :
I have 2 data frame, i need to combine like below
This is my Data frame 1
This is my Data frame 2
i want my output as below :
index = pd.MultiIndex.from_product(
[df1['symbol'], df2['symbol']],
names=['col1', 'col2'])
pd.DataFrame(index=index).reset_index()
col1 col2
0 L160 K-AL
1 L160 K-PL
2 L170 K-AL
3 L170 K-PL
4 L180 K-AL
5 L180 K-PL
Edit:
even better now thanks to @Andy L.:
pd.MultiIndex.from_product([df1['symbol'], df2['symbol']], names=['col1', 'col2']) \
.to_frame(index=False)
Assign
an artificial key column and merge
on it to get all the matches:
df1.assign(key=1).merge(df2.assign(key=1), on='key', suffixes=['_1', '_2']).drop('key', axis=1)
Output
symbol_1 symbol_2
0 L160 K-AL
1 L160 K-PL
2 L170 K-AL
3 L170 K-PL
4 L180 K-AL
5 L180 K-PL
df1 = DataFrame({'key':[1,1,1],'symbol':['L160','L170','L180']})
df2 = DataFrame({'key':[1,1],'symbol':['K-PL','K-AL']})
merge(df1, df2,on='key')[['col1', 'col2']]
Basically its a cartesian product. LINK
OUTPUT
key symbol_x symbol_y
0 1 L160 K-PL
1 1 L160 K-AL
2 1 L170 K-PL
3 1 L170 K-AL
4 1 L180 K-PL
5 1 L180 K-AL
Using Numpy can also work:
import numpy as np
import pandas as pd
df1 = pd.DataFrame(['L160', 'L170', 'L180'],columns=['symbol'])
df2 = pd.DataFrame(['K-AL', 'K-PL'],columns=['symbol'])
np.transpose([np.tile(df1['symbol'], len(df2['symbol'])), np.repeat(df2['symbol'], len(df1['symbol']))])
Or directly in a Pandas dataframe:
pd.DataFrame(np.transpose([np.tile(df1['symbol'], len(df2['symbol'])), np.repeat(df2['symbol'], len(df1['symbol']))]))