2015-06-02 172 views
0

我的一位同事正在尝试将矩阵和一个Series结合起来,并试图查看是否有本地熊猫的方式来代替使用循环。将数据帧与系列合并

例如,如果我有这样的组成的

1, 2, 3 
4, 5, 6 
7, 8, 9 

一个数据帧,并与值

13, 14, 15 

一个系列然后期望的结果会是

1, 2, 3, 13 
1, 2, 3, 14 
1, 2, 3, 15 
4, 5, 6, 13 
4, 5, 6, 14 
4, 5, 6, 15 
7, 8, 9, 13 
7, 8, 9, 14 
7, 8, 9, 15 

是否有具体的一个大熊猫达到这种效果的方法。我不确定要找到什么具体的东西,而且我头脑中相似的一些尝试失败了。

+0

可能涉及到:http://stackoverflow.com/questions/13269890/cartesian-product-in-pandas – cel

+0

我们可以假设Series和DataFrame使用相同的索引值吗? – holdenweb

回答

2

您可以通过合并来完成此操作。如果您想要完整的笛卡尔产品,您可以执行以下操作:

import pandas as pd 
df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]]) 
df['key'] = 0 
ser = pd.DataFrame({'data': [13,14,15], 'key': [0] * 3}) 

result = pd.merge(df, ser, on = 'key').drop('key', axis = 1) 

我检查了结果,它看起来像你想要的。如果您在pandas docs中搜索“合并方法简介(关系代数)”,请参阅更多信息。

0

有人发布了一个答案,帮助我得到我想要的东西,但之后删除它,然后我可以回来接受。

基本上我需要做的是使该系列一数据帧,并添加一个公共列这两个假设这些被称为一个和双向只是

In [1]: import pandas as pd 

In [2]: a = pd.DataFrame({1:[1,4,7],2:[2,5,8],3:[3,6,9]}) 

In [3]: a 
Out[3]: 
    1 2 3 
0 1 2 3 
1 4 5 6 
2 7 8 9 


In [5]: b = pd.DataFrame({4:[13,14,15]}) 

In [6]: b 
Out[6]: 
    4 
0 13 
1 14 
2 15 

In [7]: a["key"] = 1 

In [8]: b["key"] = 1 

In [9]: c = a.merge(b, on="key") 

In [10]: c 
Out[10]: 
    1 2 3 key 4 
0 1 2 3 1 13 
1 1 2 3 1 14 
2 1 2 3 1 15 
3 4 5 6 1 13 
4 4 5 6 1 14 
5 4 5 6 1 15 
6 7 8 9 1 13 
7 7 8 9 1 14 
8 7 8 9 1 15 

In [11]: del c["key"] 

In [12]: c 
Out[12]: 
    1 2 3 4 
0 1 2 3 13 
1 1 2 3 14 
2 1 2 3 15 
3 4 5 6 13 
4 4 5 6 14 
5 4 5 6 15 
6 7 8 9 13 
7 7 8 9 14 
8 7 8 9 15 

In [13]: