问题描述
我正在对我的数据做一些 EDA,这是 Pandas 数据框,我在这一点上被卡住了。 我不知道如何计算党==共和党或民主党的婴儿的价值。 我想在arty==republican或democrat的所有列上应用value_counts。
party infants water budget physician salvador religious satellite
republican n y n y y y n
republican n y n y y y n
democrat ? y y ? y y n
democrat n y y n ? y n
democrat y y y n y y n
答案应该是这样的
party infants
democrat. y=1, n=1, ?=1
republican y=0, n=2, ?=0
就像所有列一样。 我已经尝试过类似的事情。
infants_count = data["infants"].value_counts().where(data['party']=="democrat")
infants_count.loc['y']
1楼
咱们试试吧:
df_out = df.groupby('party')['infants'].value_counts().unstack(0).fillna(0)
df_out.apply(lambda x: ','.join(x.index +'='+x.astype(int).astype(str)))\
.rename('infant')\
.reset_index()
输出:
party infant
0 democrat ?=1,n=1,y=1
1 republican ?=0,n=2,y=0
更新以回答以下评论:
df_out = df.groupby('party')['infants'].value_counts().unstack(-1).fillna(0)
df_out
输出:
infants ? n y
party
democrat 1.0 1.0 1.0
republican 0.0 2.0 0
绘图
df_out = df.groupby('party')['infants'].value_counts().unstack(-1).fillna(0)
ax = df_out.plot.bar(stacked=True)
输出:
选择单个值:
df_out.loc['democrat','y']
输出:
1.0