Pandas 每个组合都有一个数据帧

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

各位!

我有一个问题,多数据帧合并,组合

请检查下面的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 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