Python 熊猫按多个列分组,将唯一分组的值作为它们自己的列

Python 熊猫按多个列分组,将唯一分组的值作为它们自己的列,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,示例数据帧= df = pd.DataFrame({'ID': [1,1,2,2,2,3,3,3], ... 'Type': ['b','b','b','a','a','a','a']}) 我想返回按ID分组的计数,然后返回类型中每个唯一ID的一列,以及该分组行中每个类型的计数: pd.DataFrame({'ID': [1,2,3],'Count_TypeA': [0,2,3], 'CountTypeB':[2,1,0]}, 'TotalCount':[2,3,

示例数据帧=

df = pd.DataFrame({'ID': [1,1,2,2,2,3,3,3],
...                'Type': ['b','b','b','a','a','a','a']})
我想返回按ID分组的计数,然后返回类型中每个唯一ID的一列,以及该分组行中每个类型的计数:

pd.DataFrame({'ID': [1,2,3],'Count_TypeA': [0,2,3], 'CountTypeB':[2,1,0]}, 'TotalCount':[2,3,3])

使用pandas中的groupby功能是否有一种简单的方法可以做到这一点?

对于您需要的内容,您可以使用
pandas
获取假人的方法。这将把分类变量转换成虚拟/指示符变量。你可以查看参考资料

检查这是否符合您的要求:

import pandas as pd

df = pd.DataFrame({'ID': [1, 1, 2, 2, 2, 3, 3, 3],
                   'Type': ['b', 'b', 'b', 'a', 'a', 'a', 'a', 'a']})

dummy_var = pd.get_dummies(df["Type"])
dummy_var.rename(columns={'a': 'CountTypeA', 'b': 'CountTypeB'}, inplace=True)

df1 = pd.concat([df['ID'], dummy_var], axis=1)

df_group1 = df1.groupby(by=['ID'], as_index=False).sum()

df_group1['TotalCount'] = df_group1['CountTypeA'] + df_group1['CountTypeB']
print(df_group1)
这将打印以下结果:

   ID  CountTypeA  CountTypeB  TotalCount
0   1           0           2           2
1   2           2           1           3
2   3           3           0           3
pd.交叉表(df['ID',df['Type',margins=True)