首页 > 解决方案 > 计算 id 出现的次数并将其分配给列

问题描述

我有一个数据集,并希望根据其他列会话时间提取该列中重复的 ID 计数。

数据集:

person ID   Session type ID
1001    morning      1
1001    evening      1
1002    morning      2
1002    night        1
1001    morning      2
1002    evening      1
1002    night        2

根据我的类型 ID == 1 我想为每个会话计算它们,如下所述

输出:

person ID   morning_count   evening_count   night_count
1001             1                1              0
1002             0                1              1

根据我的类型 ID ==1,它应该给我每个会话列的计数。

标签: pythonpython-3.xpandaspandas-groupby

解决方案


首先DataFrame.assign为匹配的行创建填充整数的新列,然后使用DataFrame.pivot_tablewith 聚合并最后使用,和sum进行一些数据清理:DataFrame.add_suffixDataFrame.reset_indexDataFrame.rename_axis

df1 = (df.assign(count=df['type ID'].eq(1).astype(int))
         .pivot_table(index='person ID',
                      columns='Session', 
                      values='count', 
                      aggfunc='sum', 
                      fill_value=0)
         .add_suffix('_count')
         .reset_index()
         .rename_axis(None, axis=1))
print (df1)
   person ID  evening_count  morning_count  night_count
0       1001              1              1            0
1       1002              1              0            1

推荐阅读