1

让我们举个例子DataFrame

import pandas as pd
df = pd.DataFrame(['a','b','c','d'],columns=['A'])

现在,我想做的是再添加两列(让我们将它们命名为BC),其数值将由某个范围定义 - 让我们假设 B inrange(0,3)和 C in range(10,12)

应该扩展初始数据框,以便对于列中的每个值,都有可用的值A的所有可能组合- 所以最终数据框应该如下所示:BC

    A  B  C
 0  a  0  10
 1  b  0  10
 2  c  0  10
 3  d  0  10
 4  a  1  10
 5  b  1  10
 6  c  1  10
 7  d  1  10
 8  a  2  10
 9  b  2  10
10  c  2  10
11  d  2  10
12  a  0  11
13  b  0  11
14  c  0  11
15  d  0  11
16  a  1  11
17  b  1  11
18  c  1  11
19  d  1  11
20  a  2  11
21  b  2  11
22  c  2  11
23  d  2  11

实现这一目标的最佳解决方案是什么?

4

1 回答 1

4

这称为叉积或笛卡尔积。你可以这样做:

>>> dfA = pd.DataFrame(['a','b','c'],columns=['A'])
>>> dfB = pd.DataFrame(range(3),columns=['B'])
>>> dfA['key'] = 1
>>> dfB['key'] = 1
>>> pd.merge(dfB, dfA, on='key').ix[:, ('A','B')]
   A  B
0  a  0
1  b  0
2  c  0
3  a  1
4  b  1
5  c  1
6  a  2
7  b  2
8  c  2

实际上,奇怪的是没有可能传递how='cross'给 merge 或 join 方法。可能是开发人员决定不经常使用它。

于 2013-10-30T14:23:43.590 回答