如何获取每行pandas数据帧中特定值的频率

Dai*_*isy 5 python pandas

我有这个熊猫数据帧:

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
Run Code Online (Sandbox Code Playgroud)

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

    ID         yes     no       nan
xyz_1          1       1        1
xyz_2          1       2        0
xyz_3          2       0        1
xyz_4          0       3        0
Run Code Online (Sandbox Code Playgroud)

我看着这个问题,但我不想要总和,而是计数。

有任何想法吗?

cs9*_*s95 2

使用pd.get_dummies,但设置dummy_naTrue

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 
Run Code Online (Sandbox Code Playgroud)