Python pandas DataFrame - 条件分组

3

我的问题很简单,我有一个如下的数据框:

   Name  Meal
0  John  Chicken
1  John  Chicken
2  John  Pizza
3  Paul  Chicken
4  Paul  Pizza
5  Paul  Pizza
6  Jack  Chicken
7  Jack  Chicken
8  Jack  Fish

我希望以某种条件分组的方式,创建一个新的数据框架并指定每个餐点类型的计数,例如:

   Name  Chicken_meals  Pizza_meals  Fish_meals
0  John  2              1            0
1  Paul  1              2            0
2  Jack  2              0            1

这是我的第一个问题,如果格式不完美请见谅 - 我尽力了!提前感谢!
3个回答

1

在借鉴@Baron Legendre的好思路后更新答案

可以通过使用pivot_table来实现:

dfp = pd.pivot_table(df,index='Name', columns='Meal', fill_value=0, aggfunc=len) \
        .add_suffix('_meals').reset_index().rename_axis(None, axis=1) 

print(dfp)

结果

   Name  Chicken_meals  Fish_meals  Pizza_meals
0  Jack              2           1            0
1  John              2           0            1
2  Paul              1           0            2

0
df
###
   Name     Meal
0  John  Chicken
1  John  Chicken
2  John    Pizza
3  Paul  Chicken
4  Paul    Pizza
5  Paul    Pizza
6  Jack  Chicken
7  Jack  Chicken
8  Jack     Fish

我建议使用 pivot_table 方法:
table = pd.pivot_table(df, index=['Name'], columns=['Meal'], aggfunc=len, fill_value=0)
table = table.add_suffix('_meals')
table = table.rename_axis(None, axis=1).reset_index()
table
###
   Name  Chicken_meals  Fish_meals  Pizza_meals
0  Jack              2           1            0
1  John              2           0            1
2  Paul              1           0            2

0

试试这个:

(df.groupby(['Name','Meal']).size()
.unstack()
.rename('{}_meals'.format,axis=1)
.reset_index()
.fillna(0)
.rename_axis(None,axis=1))

输出:

   Name  Chicken_meals  Fish_meals  Pizza_meals
0  Jack            2.0         1.0          0.0
1  John            2.0         0.0          1.0
2  Paul            1.0         0.0          2.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接