简体   繁体   English

在 python 中,将 pandas “一对多”数据集转换为列

[英]In python, convert pandas “one to many” dataset transposing rows to columns

I have two python datasets in "one to many" format, linked by ID column.我有两个“一对多”格式的 python 数据集,由 ID 列链接。

df1 = pd.DataFrame({'id': [1, 2],
                    'mandante': ['flamengo', 'botafogo'],
                    'visitante': ['ceara', 'são paulo'],
                     'vencedor': ['mandante', 'visitante']})

df2 = pd.DataFrame({'id': [1,1,2,2],
                    'tipo': ['mandante', 'visitante', 'mandante', 'visitante'],
                    'posse':['25%', '75%', '50%', '50%'],
                    'pontos': [25, 20, 14, 10]})

数据集

And I would like to join this datasets but adding columns to DF1 dataset for every two lines of DF2, creating a new dataset with columns made by eat row of DF2 dataset using "tipo" column in names...我想加入这个数据集,但是为 DF2 的每两行添加列到 DF1 数据集,创建一个新的数据集,其中的列是使用名称中的“tipo”列吃掉的 DF2 数据集的行...

最终数据集

thanks a lot!!!多谢!!!

Use DataFrame.pivot with flatten columns of MultiIndex :DataFrame.pivotMultiIndex的展平列一起使用:

df2 = df2.pivot(index='id',columns='tipo')
#alternative
#df2 = df2.set_index(['id','tipo']).unstack()
df2.columns = df2.columns.map(lambda x: f'{x[0]}_{x[1]}')

print (df2)
   posse_mandante posse_visitante  pontos_mandante  pontos_visitante
id                                                                  
1             25%             75%               25                20
2             50%             50%               14                10

And then add to df1 by DataFrame.join :然后通过DataFrame.join添加到df1

df = df1.join(df2, on='id')
print (df)
   id  mandante  visitante   vencedor posse_mandante posse_visitante  \
0   1  flamengo      ceara   mandante            25%             75%   
1   2  botafogo  são paulo  visitante            50%             50%   

   pontos_mandante  pontos_visitante  
0               25                20  
1               14                10  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM