【问题标题】:How do I use conditional selection and groupby aggregation to produce a df with dummy variables?如何使用条件选择和 groupby 聚合来生成带有虚拟变量的 df?
【发布时间】:2020-11-16 23:44:41
【问题描述】:

我有 2016 年选举的县级数据,我想根据每个县的获胜者创建虚拟变量。

df 格式如下:

FIPS  candidate  party  votepct
1001  Clinton     D      0.237
1001  Trump       R      0.727  
1001  Other      NaN     0.034
1003  Clinton     D      ...
1003  ...        ...     ...

我想出了一种方法来检索每个县的获胜者,但我试图保留其余的列。这是我所拥有的:

df.groupby('FIPS')['votepct'].max().reset_index()

产量:

   FIPS   votepct
0  1001   0.727
1  1003   0.765
2  1005   ...

我意识到我可能会使用连接,但这感觉很草率。处理这个问题的正确方法是什么?

【问题讨论】:

  • 请检查我的答案

标签: python pandas dataframe pandas-groupby dummy-variable


【解决方案1】:

让我们尝试使用变换找到最大值并将它们逐行等同于值并屏蔽它们。

df[df.groupby('FIPS')['votepct'].transform(lambda x:x.eq(x.max(),1))]

【讨论】:

  • 这种方法给我一个“长度不匹配”错误(新值的元素比预期的轴多)。我尝试重置索引无济于事。有什么想法吗?
【解决方案2】:

使用idxmax

df.loc[df.groupby('FIPS')['votepct']
         .idxmax()]

请记住,它更快,因为您不需要使用eq

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 1970-01-01
    • 2018-09-29
    • 2023-02-24
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多