2013-10-30 53 views
1
擴展數據幀

讓我們舉個例子數據框現在大熊貓 - 通過添加另一個級別

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

,我想要做的就是增加兩列(讓我們命名他們BC)與數值那會由某個範圍定義 - 假設B在range(0,3)和C中在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 

什麼會成爲實現這一目標的最佳解決方案?

回答

3

這個叫cross product or cartesian product。你可以這樣說:

>>> 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'合併或連接方法。可能是開發者決定它不會經常使用。