我有这个熊猫数据帧:
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)
我看着这个问题,但我不想要总和,而是计数。
有任何想法吗?
使用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
Run Code Online (Sandbox Code Playgroud)