首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas Dataframe每种组合

Pandas Dataframe每种组合
EN

Stack Overflow用户
提问于 2017-10-24 09:01:46
回答 2查看 185关注 0票数 0

所有人!

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

请检查下面的csv。

我想要所有的组合(用户-内容)

换句话说,用户拥有所有contentInformation

请帮帮我,谢谢!

代码语言:javascript
复制
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

我想看看下面。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2017-10-24 09:12:00

执行交叉连接的一个巧妙技巧是在虚拟列上执行merge

代码语言:javascript
复制
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

如果你想设置一个MultiIndex,你可以用MultIndex.from_product创建一个,然后对交叉连接的结果调用set_index

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-10-24 09:38:43

有点想过头了,哈哈。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46900645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档