【问题标题】:Create Dummy Columns for values in Single Pandas Column and Group into single row为单个 Pandas 列中的值创建虚拟列并分组为单行
【发布时间】:2021-02-12 16:30:53
【问题描述】:

我正在尝试使用 pandas 数据框并在单个列上执行类似枢轴的操作。我想取多行(按一些标识列分组)并将该单列转换为虚拟指标变量。我知道pd.get_dummies(),但我想将多行压缩成一行。

以下示例:

import pandas as pd
import numpy as np

# starting data
d = {'ID': [1,1,1,2,2,3,3,3], 
     'name': ['bob','bob','bob','shelby','shelby','jordan','jordan','jordan'],
     'type': ['type1','type2','type4','type1','type6','type5','type8','type2']}
df: pd.DataFrame = pd.DataFrame(data=d)
print(df.head(9))

   ID    name   type
0   1     bob  type1
1   1     bob  type2
2   1     bob  type4
3   2  shelby  type1
4   2  shelby  type6
5   3  jordan  type5
6   3  jordan  type8
7   3  jordan  type2

我希望最终结果看起来像:

   ID    name  type1  type2  type4  type5  type6  type8
0   1     bob      1      1      1      0      0      0
1   2  shelby      1      0      0      0      1      0
2   3  jordan      0      1      0      1      0      1

【问题讨论】:

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


    【解决方案1】:

    给你!

    pd.get_dummies(df, columns=['type'], prefix='', prefix_sep='').groupby(['ID','name']).max().reset_index()
    
    • prefix=''prefix_sep='' 避免在列名称中添加额外的前缀,例如 type_type1type_type2
    • groupby(this_columns) 允许您通过 this_columns 聚合其他列中的值。
    • max() on groupby() 将为您提供最大的聚合值,例如,对于 bob,您将拥有 type1 虚拟格式的值 1,0,0,但您希望它为 1(如果有的话)是 1,所以 max() 在这里工作。
    • reset_index() 将您的列 IDname 返回,它们已被 groupby() 转换为索引。

    【讨论】:

    • 谢谢,您能解释一下.max() 在这种情况下是如何工作的吗?或许可以逐步了解代码在做什么?
    • 已更新。如果还不清楚,或者您想尝试分解代码并进行探索,请告诉我:)
    • 如果我的半小时投资对您有所帮助,请帮我点赞并接受答案:)
    • 绝对。感谢帮助。我相信这个解决方案正在完成我所需要的
    • 乐于助人:)
    【解决方案2】:

    你可以使用pandas.DataFrame.pivot_table方法(documentation here

    df.pivot_table(index=['ID'], columns=['type'], aggfunc='count', fill_value=0)
    

    输出

    type type1 type2 type4 type5 type6 type8
    ID                                      
    1        1     1     1     0     0     0
    2        1     0     0     0     1     0
    3        0     1     0     1     0     1
    

    我无法通过单行方法调用获得您想要的输出,您需要合并两个数据框并保留您想要的列。

    您会注意到pivot_table 方法返回一个数据框,其中ID 列是索引

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2015-12-31
      • 2020-09-21
      相关资源
      最近更新 更多