【问题标题】:Convert a categorical valued column to its statistical values in Python在 Python 中将分类值列转换为其统计值
【发布时间】:2021-11-16 23:14:30
【问题描述】:

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

import pandas as pd

data = {'ID':['A','B','C','D','E','F'],
'Gender':['Man', 'Woman', 'Transgender', 'Non-binary,Transgender', 'Woman,Non-binary', 
'Man,Non-binary,Transgender']}

df = pd.DataFrame(data)
df

现在,我想为“性别”列中的每个值创建一列,如果该值存在于该行中,则新列应为“1”,否则为空。所需的最终表格如下所示。

不能使用 pd.get_dummies(),因为在许多行中有多个值(例如:'Non-binary, Transgender')。 我想过对所有值进行手动硬编码,但想知道是否有办法自动化该过程。 任何帮助是极大的赞赏。谢谢。

【问题讨论】:

    标签: python pandas dataframe data-science data-processing


    【解决方案1】:

    你可以拆分,,轻松回到可以使用get_dummies的情况:

    >>> df_split = df[['ID']].join(df['Gender'].str.split(',')).explode('Gender')
    >>> df_split
      ID       Gender
    0  A          Man
    1  B        Woman
    2  C  Transgender
    3  D   Non-binary
    3  D  Transgender
    4  E        Woman
    4  E   Non-binary
    5  F          Man
    5  F   Non-binary
    5  F  Transgender
    >>> dummies = pd.get_dummies(df_split['Gender']).groupby(df_split['ID']).max().reset_index()
    >>> dummies
      ID  Man  Non-binary  Transgender  Woman
    0  A    1           0            0      0
    1  B    0           0            0      1
    2  C    0           0            1      0
    3  D    0           1            1      0
    4  E    0           1            0      1
    5  F    1           1            1      0 
    >>> df.merge(dummies, on='ID')
      ID                      Gender  Man  Non-binary  Transgender  Woman
    0  A                         Man    1           0            0      0
    1  B                       Woman    0           0            0      1
    2  C                 Transgender    0           0            1      0
    3  D      Non-binary,Transgender    0           1            1      0
    4  E            Woman,Non-binary    0           1            0      1
    5  F  Man,Non-binary,Transgender    1           1            1      0
    

    【讨论】:

      【解决方案2】:

      使用Series.str.get_dummies,它允许您在字符串中有多个值的情况下指定分隔符,然后将结果连接回来。

      pd.concat([df, df['Gender'].str.get_dummies(',').add_prefix('Gender_')], axis=1)
      
        ID                      Gender  Gender_Man  Gender_Non-binary  Gender_Transgender  Gender_Woman
      0  A                         Man           1                  0                   0             0
      1  B                       Woman           0                  0                   0             1
      2  C                 Transgender           0                  0                   1             0
      3  D      Non-binary,Transgender           0                  1                   1             0
      4  E            Woman,Non-binary           0                  1                   0             1
      5  F  Man,Non-binary,Transgender           1                  1                   1             0
      

      【讨论】:

      • 有什么办法可以用空字符串('')替换这些 0?
      • @Shiva 你可以在虚拟数据帧上使用replace。只需将其更改为df['Gender'].str.get_dummies(',').add_prefix('Gender_').replace(0, '')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2016-04-24
      • 2012-08-16
      • 2022-11-03
      • 2021-03-23
      • 2019-03-29
      相关资源
      最近更新 更多