当前位置: 代码迷 >> python >> Count_values 使用 where 条件来计算一列相对于另一列的值
  详细解决方案

Count_values 使用 where 条件来计算一列相对于另一列的值

热度:78   发布时间:2023-07-14 08:46:06.0

我正在对我的数据做一些 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']

咱们试试吧:

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