首页 > 解决方案 > 具有唯一 groupby 的新列在数据框中产生

问题描述

我有一个带有重复行('id')的数据框。

我想汇总数据,但首先需要对每个 id 的唯一会话求和。

id     session
123      X
123      X 
123      Y
123      Z
234      T
234      T

此代码运行良好,但当我想将此新列“ncount”添加到我的数据框时却不行。

df['ncount'] = df.groupby('id')['session'].nunique().reset_index()

我尝试使用转换,但它没有用。

df['ncount'] = df.groupby('id')['session'].transform('nunique')

这是转换代码的结果(我的数据作为重复 id):

id     session    ncount
123      X          1
123      X          1
123      Y          1
123      Z          1
234      T          1
234      T          1

这是我感兴趣的结果:

id     session    ncount
123      X          3
123      X          3
123      Y          3
123      Z          3
234      T          1
234      T          1

标签: pythongroup-by

解决方案


使用以下步骤:

1.分组数据并存储在单独的变量中。

2.然后合并回原始数据框。

代码:

import pandas as pd

df = pd.DataFrame({"id":[123,123,123,123,234,234],"session":["X","X","Y","Z","T","T"]})

x = df.groupby(["id"])['session'].nunique().reset_index() 

res = pd.merge(df,x,how="left",on="id")

print(res)

如果需要,您可以重命名列名。


推荐阅读