python - Pandas 在一列中找到最大值并从另一行显示

标签 python pandas

阿拉巴马州 1 伯恩,布拉德利 68.16 68.16 0.0 勒弗洛尔,伯顿 R. 31.71 31.71 0.0 未知 0.13 0.13 0.0

我有一个看起来像这样的数据集:

STATE | DISTRICT | CANDIDATE NAME | GENERAL VOTE
Alabama | 1 | Byrne, Bradley |  68.16
Alabama | 1 | LeFlore, Burton R. | 31.71
Alabama | 1 | Unknown | 0.13
Alabama | 2 | Name | 65.43
Alabama | 2 | Name | 0.13

我必须按州和地区分组,因为每个州都有多个地区并且有很多州。我已经这样做了。 但是,我需要找到每个分组的最大值,并显示与这个最大值重合的候选名称。我还必须显示每个分组中最大和最小一般投票之间的差异。我已经完成了其中的一些,但我被卡住了

 df_out = dfworking.groupby(["STATE", "D", "CANDIDATE NAME"])['GENERAL PERCENT'].agg(['max','min'])
df_out['Margin'] = df_out['max']-df_out['min']
df_new_out = dfworking.groupby(['STATE','D'])['GENERAL PERCENT'].max()

我不确定如何显示 margin 列,以及与同一数据框中的最大投票一致的名称。 谢谢!

最佳答案

注意 - STATEDISTRICTGENERAL VOTE 列中的值必须首先排序。

#sorting
dfworking = dfworking.sort_values(['STATE','DISTRICT','GENERAL VOTE'], 
                                  ascending=[True, True, False])

#get index of max value in GENERAL VOTE column
df1 = dfworking.groupby(["STATE", "DISTRICT"])['GENERAL VOTE'].idxmax()
#create new column - not matched value return NaN
dfworking['cand'] = dfworking.loc[df1, 'CANDIDATE NAME']
#replace NaN by forward  filling
dfworking['cand'] = dfworking['cand'].ffill()

print (dfworking)
     STATE  DISTRICT      CANDIDATE NAME  GENERAL VOTE            cand
0  Alabama         1      Byrne, Bradley         68.16  Byrne, Bradley
1  Alabama         1  LeFlore, Burton R.         31.71  Byrne, Bradley
2  Alabama         1             Unknown          0.13  Byrne, Bradley
3  Alabama         2                Name         65.43            Name
4  Alabama         2                Name          0.13            Name

另一种解决方案是创建 df,其中包含 top candidate 和 join转为原文:

df1 = dfworking.loc[dfworking.groupby(["STATE", "DISTRICT"])['GENERAL VOTE'].idxmax()]
df1 = df1.set_index(['STATE','DISTRICT'])['CANDIDATE NAME'].rename('cand')
dfworking = dfworking.join(df1, on=['STATE','DISTRICT'])
print (dfworking)
     STATE  DISTRICT      CANDIDATE NAME  GENERAL VOTE            cand
0  Alabama         1      Byrne, Bradley         68.16  Byrne, Bradley
1  Alabama         1  LeFlore, Burton R.         31.71  Byrne, Bradley
2  Alabama         1             Unknown          0.13  Byrne, Bradley
3  Alabama         2                Name         65.43            Name
4  Alabama         2                Name          0.13            Name

关于python - Pandas 在一列中找到最大值并从另一行显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46211892/

相关文章:

python - PyCharm 没有导出正确的 requirements.txt

python - 读/写文本文件

python - 如何通过 python 包查找谷歌搜索结果

python - Pandas 条件排名

python - Pandas Groupby 仅相同 ID 且列值为 false 时

python - Pandas 有条件创建系列/数据框列

python - PyCharm 类型提示返回类型

python - 如何抑制显示后续异常的父异常(原因)

python - 为另一个数据框中的每一行重复 pandas 行的更有效方法?

python - 多个 Pandas 列