在 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.pivot
与 MultiIndex
的扁平化列一起使用:
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
我有两个“一对多”格式的 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.pivot
与 MultiIndex
的扁平化列一起使用:
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