假设我有两个数据帧,它们看起来像这样:
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。
答案 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']
))