2017-08-04 19 views
1

說我有兩個dataframes,他們是這樣的:乘兩個熊貓dataframes一起重複數據一定量的時候

1/31 
2/28 
3/31 

和:

black dog 
white dog 
orange cat 

我想我得到的數據幀,以像這樣的:

1/31 black dog 
1/31 white dog 
1/31 orange cat 
2/28 black dog 
2/28 white dog 
2/28 orange cat 
3/31 black dog 
3/31 white dog 
3/31 orange cat 

有一個簡單的矩陣乘法倍增這兩個熊貓一起dataframes?我不熟悉這樣做的語法,如果可以,我想盡可能避免merge/forloops。要做到這一點

回答

2

一種方法是使用pd.merge

df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1) 

輸出:

0_x  0_y 1 
0 1/31 black dog 
1 1/31 white dog 
2 1/31 orange cat 
3 2/28 black dog 
4 2/28 white dog 
5 2/28 orange cat 
6 3/31 black dog 
7 3/31 white dog 
8 3/31 orange cat 
0

故意厭惡,但令人驚訝的速度快:

from itertools import starmap as smp, product as xp 
pd.concat(
    smp(
     lambda x, i: x.iloc[i].reset_index(drop=True), 
     (lambda y: zip(y, map(list, zip(*xp(*map(range, map(len, y)))))))([d1, d2]) 
    ), axis=1 
) 

    col1 color animal 
0 1/31 black dog 
1 1/31 white dog 
2 1/31 orange cat 
3 2/28 black dog 
4 2/28 white dog 
5 2/28 orange cat 
6 3/31 black dog 
7 3/31 white dog 
8 3/31 orange cat 

設置

d1 = pd.DataFrame(dict(col1=['1/31', '2/28', '3/31'])) 

d2 = pd.DataFrame(OrderedDict(
    color=['black', 'white', 'orange'], 
    animal=['dog', 'dog', 'cat'] 
))