2015-06-02 223 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]: