Pandas合并多个DataFrame(关联DataFrame)
Pandas Merge Multi DataFrame( relate DataFrame )
我有关于 pandas 数据帧合并的问题。
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 行大小为 UserID(User csv) Count * ContentID(Content csv) Count
( ex> 以上 7 * 3 -> 21 行)
所有DataFrame都是相关的。
- 评级/内容 -> ContentID
- 评级/用户 -> UserID
换句话说,Result DataFrame只有remain rating zone(NAN),Other zone是none nan.
实际大小内容(6000),用户(220000)-> 总结果行数:大约 1300000000
我试过了,但它引发了内存错误...
请帮帮我..谢谢..
您可以将交叉连接与左连接结合使用 - df2.ContentID
和 df3.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
我有关于 pandas 数据帧合并的问题。
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 行大小为 UserID(User csv) Count * ContentID(Content csv) Count ( ex> 以上 7 * 3 -> 21 行)
所有DataFrame都是相关的。 - 评级/内容 -> ContentID - 评级/用户 -> UserID
换句话说,Result DataFrame只有remain rating zone(NAN),Other zone是none nan.
实际大小内容(6000),用户(220000)-> 总结果行数:大约 1300000000
我试过了,但它引发了内存错误...
请帮帮我..谢谢..
您可以将交叉连接与左连接结合使用 - df2.ContentID
和 df3.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