2017-09-27 64 views
0

我有熊貓數據框合併問題。熊貓合併多數據幀(涉及DataFrame)

PLZ,以下數據..

Rating csv 
UserID ContentID Rating 
U-1  C-1  3 
U-1  C-2  4 
U-3  C-3  1 
U-5  C-1  5 

Content csv 
Title ContentID Language 
T-1  C-1  EN 
T-2  C-2  EN 
T-3  C-3  EN 

User csv 
UserID Age Gender 
U-1 10 1 
U-2 20 0 
U-3 30 1 
U-4 40 0 
U-5 50 1 
U-6 60 0 
U-7 70 1 

我想結果

UserID ContentID Rating Title Language Age Gender 
U-1  C-1  3  T-1  EN  10  1 
U-1  C-2  4  T-2  EN  10  1 
U-1  C-3  NAN T-3  EN  10  1 
U-2  C-1  NAN T-1  EN  20  0 
U-2  C-2  NAN T-2  EN  20  0 
U-2  C-3  NAN T-3  EN  20  0 
U-3  C-1  NAN T-1  EN  30  1   
U-3  C-2  NAN T-2  EN  30  1 
U-3  C-3  1  T-3  EN  30  1  
U-4  C-1  NAN T-1  EN  40  0  
U-4  C-2  NAN T-2  EN  40  0 
U-4  C-3  NAN T-3  EN  40  0 
U-5  C-1  5  T-1  EN  50  1   
U-5  C-2  NAN T-2  EN  50  1  
U-5  C-3  NAN T-3  EN  50  1  
U-6  C-1  NAN T-1  EN  60  0  
U-6  C-2  NAN T-2  EN  60  0  
U-6  C-3  NAN T-3  EN  60  0  
U-7  C-1  NAN T-1  EN  70  1  
U-7  C-2  NAN T-2  EN  70  1  
U-7  C-3  NAN T-3  EN  70  1  

總DF行大小是用戶ID(用戶CSV)計數*內容識別(內容CSV)計數 (EX>以上7 * 3 - > 21行)

所有DataFrame都相關。換句話說,Result DataFrame僅僅是保留評級區域(NAN),其他區域是非南區域。其他區域是非南區域。

真實大小的內容(6000),用戶(220000) - >總結果行數:約13億

我嘗試它,但它是提高的MemoryError ...

PLZ,幫助me..Thanks ..

+0

聽起來像是你想(的某些種類)的聯接。 –

回答

1

您可以使用跨左加盟加盟 - 必須的唯一值df2.ContentIDdf3.UserID

df = pd.merge(pd.merge(df3.assign(A=1), df2.assign(A=1), on='A'), df1, 'left').drop('A', 1) 
print (df) 
    UserID Age Gender Title ContentID Language Rating 
0  U-1 10  1 T-1  C-1  EN  3.0 
1  U-1 10  1 T-2  C-2  EN  4.0 
2  U-1 10  1 T-3  C-3  EN  NaN 
3  U-2 20  0 T-1  C-1  EN  NaN 
4  U-2 20  0 T-2  C-2  EN  NaN 
5  U-2 20  0 T-3  C-3  EN  NaN 
6  U-3 30  1 T-1  C-1  EN  NaN 
7  U-3 30  1 T-2  C-2  EN  NaN 
8  U-3 30  1 T-3  C-3  EN  1.0 
9  U-4 40  0 T-1  C-1  EN  NaN 
10 U-4 40  0 T-2  C-2  EN  NaN 
11 U-4 40  0 T-3  C-3  EN  NaN 
12 U-5 50  1 T-1  C-1  EN  5.0 
13 U-5 50  1 T-2  C-2  EN  NaN 
14 U-5 50  1 T-3  C-3  EN  NaN 
15 U-6 60  0 T-1  C-1  EN  NaN 
16 U-6 60  0 T-2  C-2  EN  NaN 
17 U-6 60  0 T-3  C-3  EN  NaN 
18 U-7 70  1 T-1  C-1  EN  NaN 
19 U-7 70  1 T-2  C-2  EN  NaN 
20 U-7 70  1 T-3  C-3  EN  NaN 
+0

嗨,您的回答是在大數據中引發MemoryError .. 您的答案在小數據中很好,但是大數據會引發memoryError。 我使用用戶(6000),內容(220000)。 plz.help me。 –

+0

我很抱歉,熊貓如果非常大的文件需要更多的「內存」。 Mayby更好的是使用[dask](https://dask.pydata.org/en/latest/) – jezrael