将两个熊猫数据帧相乘以重复数据一定次数

时间:2017-08-04 18:41:54

标签: python pandas

假设我有两个数据帧,它们看起来像这样:

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

是否有一个简单的矩阵乘法将这两个熊猫数据帧相乘?我不熟悉这样做的语法,如果可以,我想尽可能避免merge / forloops。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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']
))