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

时间:2018-09-15 16:24:58

标签: python pandas dataframe

我正在对我的数据(即熊猫数据框)进行一些EDA操作,因此我被困在了这一点上。我不知道如何计算party ==共和党或民主党的婴儿的价值。我想在arty ==共和党人或民主党人的所有列上应用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 个答案:

答案 0 :(得分:2)

让我们尝试一下:

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)

输出:

enter image description here

选择一个值:

df_out.loc['democrat','y']

输出:

1.0