【问题标题】:How to get the frequency of a specific value in each row of pandas dataframe如何在熊猫数据帧的每一行中获取特定值的频率
【发布时间】:2018-09-14 00:30:44
【问题描述】:

我有这个熊猫数据框:

df = pd.DataFrame(
    data=[
        ['yes', 'no', np.nan],
        ['no', 'yes', 'no'],
        [np.nan, 'yes', 'yes'],
        ['no', 'no', 'no']
    ],
    index=pd.Index(['xyz_1', 'xyz_2', 'xyz_3', 'xyz_4'], name='ID'),
    columns=['class1', 'class2', 'class3']
)

print(df)
Out:

    ID         class1  class2   class3
xyz_1          yes     no       NaN    
xyz_2          no      yes      no
xyz_3          NaN     yes      yes
xyz_4          no      no       no

我想获取每行类列中“是”和“否”的频率,并有一个新的数据框,如下所示:

    ID         yes     no       nan
xyz_1          1       1        1
xyz_2          1       2        0
xyz_3          2       0        1
xyz_4          0       3        0

我查看了this 的问题,但我想要的不是总和而是计数。

有什么想法吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用pd.get_dummies,但将dummy_na 设置为True

    pd.get_dummies(
        df, prefix='', prefix_sep='', dummy_na=True
     ).groupby(level=0, axis=1).sum()  # Sum the *counts* for each column.
    
           nan  no  yes
    ID                 
    xyz_1    1   1    1
    xyz_2    0   2    1
    xyz_3    1   0    2
    xyz_4    0   3    0 
    

    【讨论】:

      【解决方案2】:

      您可以查看melt + crosstab

      newdf=df.melt('ID')
      
      pd.crosstab(newdf.ID,newdf.value.fillna('NaN'))
      Out[8]: 
      value  NaN  no  yes
      ID                 
      xyz_1    1   1    1
      xyz_2    0   2    1
      xyz_3    1   0    2
      xyz_4    0   3    0
      

      【讨论】:

        【解决方案3】:

        使用pd.get_dummies

        df = df.set_index('ID') # Do this line only if 'ID' is not index
        
        df2 = pd.get_dummies(df, dummy_na=True)
        
        df['no']  = df2[df2.columns[df2.columns.str.endswith('no')]].sum(1)
        df['yes'] = df2[df2.columns[df2.columns.str.endswith('yes')]].sum(1)
        df['nan'] = df2[df2.columns[df2.columns.str.endswith('nan')]].sum(1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-15
          • 2018-12-25
          • 1970-01-01
          • 2013-11-18
          • 1970-01-01
          • 2020-12-08
          相关资源
          最近更新 更多