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