在 python 中,转换 pandas "one to many" 数据集行转列

In python, convert pandas "one to many" dataset transposing rows to columns

我有两个“一对多”格式的 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]})

我想加入这个数据集,但是为 DF2 的每两行添加列到 DF1 数据集,创建一个新的数据集,其中的列由使用名称中的“tipo”列的 DF2 数据集的 eat 行制成...

非常感谢!!!

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

然后通过 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