2017-09-27 63 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