首页 > 解决方案 > 基于多行值改变行值的有效方法

问题描述

我有一个如下的数据框,

    year    state   candidate   candidatevotes
0   1976    Alabama Carter, Jimmy   659170
1   1976    Alabama Ford, Gerald    504070
7   1976    Alaska  Ford, Gerald    71555
8   1976    Alaska  Carter, Jimmy   44058
11  1976    Arizona Ford, Gerald    418642

在这里,我需要根据每个州的获胜者添加一个二进制列。例如,阿拉巴马州的获胜者是卡特、吉米。因此输出应该是这样的。

        year    state   candidate       candidatevotes  winner
    0   1976    Alabama Carter, Jimmy   659170           1      
    1   1976    Alabama Ford, Gerald    504070           0
    7   1976    Alaska  Ford, Gerald    71555            1
    8   1976    Alaska  Carter, Jimmy   44058            0
    11  1976    Arizona Ford, Gerald    418642           1

上述操作最有效的方法是什么?

标签: pythonpandas

解决方案


我们通常这样做transform,您可以astype(int)在最后添加 conver the bool to int

s=df.groupby(['year','state']).candidatevotes.transform('max')
df['winner']=df.candidatevotes==s
df
Out[40]: 
    year    state     candidate  candidatevotes  winner
0   1976  Alabama  Carter,Jimmy          659170    True
1   1976  Alabama   Ford,Gerald          504070   False
7   1976   Alaska   Ford,Gerald           71555    True
8   1976   Alaska  Carter,Jimmy           44058   False
11  1976  Arizona   Ford,Gerald          418642    True

推荐阅读