首页 > 解决方案 > Groupby 3 列

问题描述

我想使用基于 3 列的 groupby 函数。第一列包含家庭的姓氏信息,第二列包含该家庭中个人的姓名。第三列包含每个人在这些家庭中拥有的动物。我想获取拥有猫或狗的姓名和姓氏的人的信息,以及这些人有多少只猫或狗。我的数据看起来像

Family  SubFamily  Animal

Smith    Karen     Cat

Smith    Karen     Cow

Smith    Karen     Dog

Jackson  Jason     Dog

我试过了

merged_family.groupby(["Family","Animal","SubFamily"]).size().loc[:,'Cat'].loc[:,'Dog']

结果可能是

家庭子家庭猫狗

史密斯凯伦 1 1

或类似的东西

那没起效。你可以帮帮我吗?

标签: pythonpandas

解决方案


我认为这是一个更好的任务pivot_table

df_merged.query("Animal.isin(['Cat', 'Dog'])")
  .pivot_table(columns='Animal', index=['Family', 'SubFamily'], aggfunc='size')
  .fillna(0)
  .reset_index()
  .rename_axis(None, axis=1)

#   Family  SubFamily   Cat Dog
# 0 Jackson Jason       0.0 1.0
# 1 Smith   Karen       1.0 1.0

推荐阅读