Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于多行值更改行值的有效方法_Python_Pandas - Fatal编程技术网

Python 基于多行值更改行值的有效方法

Python 基于多行值更改行值的有效方法,python,pandas,Python,Pandas,我有一个数据框,如下所示 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

我有一个数据框,如下所示

    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

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

我们通常进行
转换
,您可以在将布尔转换为int的末尾添加
astype(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

我们通常进行
转换
,您可以在将布尔转换为int的末尾添加
astype(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