Skip to main content
 首页 » 编程设计

python之Pandas之map之虚拟变量之赋值 1

2025年05月04日24langtianya

我有两个数据框,x.head() 看起来像这样:

top      mid       adc      support jungle 
Irelia   Ahri      Jinx     Janna   RekSai 
Gnar     Ahri      Caitlyn  Leona   Rengar 
Renekton Fizz      Sivir    Annie   Rengar 
Irelia   Leblanc   Sivir    Thresh  JarvanIV 
Gnar     Lissandra Tristana Janna   JarvanIV 

我创建的数据框 fullmatrix.head() 如下所示:

Irelia  Gnar    Renekton    Kassadin    Sion    Jax Lulu    Maokai  Rumble  Lissandra   ... XinZhao Amumu   Udyr    Ivern   Shaco   Skarner FiddleSticks    Aatrox  Volibear    MonkeyKing 
0   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0 
1   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0 
2   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0 
3   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0 
4   0   0   0   0   0   0   0   0   0   0   ... 

现在我想不通的是如何将 x 数据帧中的每个名称的值 1 逐行分配给 fullmatrix 数据帧中具有相同名称的相应列(两个数据帧具有相同的行数)。

请您参考如下方法:

我确信这可以改进,但一个优点是它只需要第一个 DataFrame,并且在您获得所需的解决方案之前链式操作在概念上很好。

fullmatrix = (x.stack() 
               .reset_index(name='names') 
               .pivot(index='level_0', columns='names', values='names') 
               .applymap(lambda x: int(x!=None)) 
               .reset_index(drop=True)) 

请注意,只有出现在 x DataFrame 中的名称才会显示为 fullmatrix 中的列。如果您想要额外的列,您可以简单地执行连接。