Pandas 每个组合都有一个数据帧
各位! 我有一个问题,多数据帧合并,组合 请检查下面的csv 我想要每个组合(用户内容) 换句话说,用户拥有所有内容信息 请帮帮我,谢谢Pandas 每个组合都有一个数据帧,pandas,csv,dataframe,merge,combinations,Pandas,Csv,Dataframe,Merge,Combinations,各位! 我有一个问题,多数据帧合并,组合 请检查下面的csv 我想要每个组合(用户内容) 换句话说,用户拥有所有内容信息 请帮帮我,谢谢 UserID Age U-1 10 U-2 20 U-3 30 ContentID ContentName Genre C-1 T-1 Action C-2 T-2 Game C-3 T-3 SNS C-4 T-4 Music
UserID Age
U-1 10
U-2 20
U-3 30
ContentID ContentName Genre
C-1 T-1 Action
C-2 T-2 Game
C-3 T-3 SNS
C-4 T-4 Music
我想看看下面
UserID ContentID Age ContentName Genre
U-1 C-1 10 T-1 Action
U-1 C-2 10 T-2 Game
U-1 C-3 10 T-3 SNS
U-1 C-4 10 T-4 Music
U-2 C-1 20 T-1 Action
U-2 C-2 20 T-2 Game
U-2 C-3 20 T-3 SNS
U-2 C-4 20 T-4 Music
U-3 C-1 30 T-1 Action
U-3 C-2 30 T-2 Game
U-3 C-3 30 T-3 SNS
U-3 C-4 30 T-4 Music
交叉连接的一个巧妙技巧是在虚拟列上进行
合并
df1.assign(foo=1).merge(df2.assign(foo=1)).drop('foo', 1)
UserID Age ContentID ContentName Genre
0 U-1 10 C-1 T-1 Action
1 U-1 10 C-2 T-2 Game
2 U-1 10 C-3 T-3 SNS
3 U-1 10 C-4 T-4 Music
4 U-2 20 C-1 T-1 Action
5 U-2 20 C-2 T-2 Game
6 U-2 20 C-3 T-3 SNS
7 U-2 20 C-4 T-4 Music
8 U-3 30 C-1 T-1 Action
9 U-3 30 C-2 T-2 Game
10 U-3 30 C-3 T-3 SNS
11 U-3 30 C-4 T-4 Music
如果要设置
多索引
,可以使用MultIndex.from_product
创建一个,并调用交叉联接结果的set_index
:
idx = pd.MultiIndex.from_product((df1.index, df2.index))
df = df1.assign(foo=1).merge(df2.assign(foo=1)).drop('foo', 1)
df.set_index(idx).rename_axis(['User', 'Game'], 0)
UserID Age ContentID ContentName Genre
User Game
0 0 U-1 10 C-1 T-1 Action
1 U-1 10 C-2 T-2 Game
2 U-1 10 C-3 T-3 SNS
3 U-1 10 C-4 T-4 Music
1 0 U-2 20 C-1 T-1 Action
1 U-2 20 C-2 T-2 Game
2 U-2 20 C-3 T-3 SNS
3 U-2 20 C-4 T-4 Music
2 0 U-3 30 C-1 T-1 Action
1 U-3 30 C-2 T-2 Game
2 U-3 30 C-3 T-3 SNS
3 U-3 30 C-4 T-4 Music
交叉连接的一个巧妙技巧是在虚拟列上进行
合并
df1.assign(foo=1).merge(df2.assign(foo=1)).drop('foo', 1)
UserID Age ContentID ContentName Genre
0 U-1 10 C-1 T-1 Action
1 U-1 10 C-2 T-2 Game
2 U-1 10 C-3 T-3 SNS
3 U-1 10 C-4 T-4 Music
4 U-2 20 C-1 T-1 Action
5 U-2 20 C-2 T-2 Game
6 U-2 20 C-3 T-3 SNS
7 U-2 20 C-4 T-4 Music
8 U-3 30 C-1 T-1 Action
9 U-3 30 C-2 T-2 Game
10 U-3 30 C-3 T-3 SNS
11 U-3 30 C-4 T-4 Music
如果要设置
多索引
,可以使用MultIndex.from_product
创建一个,并调用交叉联接结果的set_index
:
idx = pd.MultiIndex.from_product((df1.index, df2.index))
df = df1.assign(foo=1).merge(df2.assign(foo=1)).drop('foo', 1)
df.set_index(idx).rename_axis(['User', 'Game'], 0)
UserID Age ContentID ContentName Genre
User Game
0 0 U-1 10 C-1 T-1 Action
1 U-1 10 C-2 T-2 Game
2 U-1 10 C-3 T-3 SNS
3 U-1 10 C-4 T-4 Music
1 0 U-2 20 C-1 T-1 Action
1 U-2 20 C-2 T-2 Game
2 U-2 20 C-3 T-3 SNS
3 U-2 20 C-4 T-4 Music
2 0 U-3 30 C-1 T-1 Action
1 U-3 30 C-2 T-2 Game
2 U-3 30 C-3 T-3 SNS
3 U-3 30 C-4 T-4 Music
稍微多想一想,哈哈
df2['v']=[df1.values.tolist()]*len(df2)
df=df2.set_index(['ContentID','ContentName','Genre']).v.apply(pd.Series).stack().reset_index().drop('level_3',1)
df[df1.columns]=df[0].apply(pd.Series)
df.sort_values('UserID').drop(0,1)
Out[421]:
ContentID ContentName Genre UserID Age
0 C-1 T-1 Action U-1 10
3 C-2 T-2 Game U-1 10
6 C-3 T-3 SNS U-1 10
9 C-4 T-4 Music U-1 10
1 C-1 T-1 Action U-2 20
4 C-2 T-2 Game U-2 20
7 C-3 T-3 SNS U-2 20
10 C-4 T-4 Music U-2 20
2 C-1 T-1 Action U-3 30
5 C-2 T-2 Game U-3 30
8 C-3 T-3 SNS U-3 30
11 C-4 T-4 Music U-3 30
稍微多想一想,哈哈
df2['v']=[df1.values.tolist()]*len(df2)
df=df2.set_index(['ContentID','ContentName','Genre']).v.apply(pd.Series).stack().reset_index().drop('level_3',1)
df[df1.columns]=df[0].apply(pd.Series)
df.sort_values('UserID').drop(0,1)
Out[421]:
ContentID ContentName Genre UserID Age
0 C-1 T-1 Action U-1 10
3 C-2 T-2 Game U-1 10
6 C-3 T-3 SNS U-1 10
9 C-4 T-4 Music U-1 10
1 C-1 T-1 Action U-2 20
4 C-2 T-2 Game U-2 20
7 C-3 T-3 SNS U-2 20
10 C-4 T-4 Music U-2 20
2 C-1 T-1 Action U-3 30
5 C-2 T-2 Game U-3 30
8 C-3 T-3 SNS U-3 30
11 C-4 T-4 Music U-3 30
看看我的答案,让我知道它是否适合你。谢谢。看看我的答案,让我知道它是否适合你。谢谢。第一次看《多索引》可以解决问题,而不是制造问题LOL@Wen多索引在这里是可选的,这就是为什么:p多索引方式启发了我,学习新事物~:-)我得到了一个记忆错误。我使用大数据(用户数据220000,内容数据6000)…@Park.BJ您知道
220000*6000
的大小吗?超过13亿行。你不可能对这些数据做笛卡尔积。重新思考您的模型。第一次查看多索引可以解决问题,而不是制造问题LOL@Wen多索引在这里是可选的,这就是为什么:p多索引方式启发了我,学习新事物~:-)我得到了一个记忆错误。我使用大数据(用户数据220000,内容数据6000)…@Park.BJ您知道220000*6000
的大小吗?超过13亿行。你不可能对这些数据做笛卡尔积。重新思考你的模型。绝对是过度思考:p确实是过度思考:p