python - Groupby + Count specific items (not all) ,将结果放在新列中
问题描述
我有这一套:
df=pd.DataFrame({'user':[1,1,2,2,2,3,3,3,3,3,4,4],
'date':['1995-09-01','1995-09-02','1995-10-03','1995-10-04','1995-10-05','1995-11-07','1995-11-08','1995-11-09','1995-11-10','1995-11-15','1995-12-18','1995-12-20'],
'type':['a','a','b','a','c','a','b','a','b','b','a','b']})
这给了我:
user date type
1 1995-09-01 a
1 1995-09-02 a
2 1995-10-03 b
2 1995-10-04 a
2 1995-10-05 c
3 1995-11-07 a
3 1995-11-08 b
3 1995-11-09 a
3 1995-11-10 b
3 1995-11-15 b
4 1995-12-18 a
4 1995-12-20 b
我想创建一个新列,其中显示“类型”列上的值计数,按“用户”列分组
这是预期的结果:
user date type cta_a
1 1995-09-01 a 2
1 1995-09-02 a 2
2 1995-10-03 b 1
2 1995-10-04 a 1
2 1995-10-05 c 1
3 1995-11-07 a 2
3 1995-11-08 b 2
3 1995-11-09 a 2
3 1995-11-10 b 2
3 1995-11-15 b 2
4 1995-12-18 a 1
4 1995-12-20 b 1
我尝试了以下但没有奏效。
df['ct_a'] = df.groupby('user')[df['type']== 'a'].transform('count')
解决方案
mask
列中的非a
值,type
然后使用:groupby
transform
count
df['ct_a'] = df['type'].mask(lambda x: x.ne('a'))\
.groupby(df['user']).transform('count')
user date type ct_a
0 1 1995-09-01 a 2
1 1 1995-09-02 a 2
2 2 1995-10-03 b 1
3 2 1995-10-04 a 1
4 2 1995-10-05 c 1
5 3 1995-11-07 a 2
6 3 1995-11-08 b 2
7 3 1995-11-09 a 2
8 3 1995-11-10 b 2
9 3 1995-11-15 b 2
10 4 1995-12-18 a 1
11 4 1995-12-20 b 1
推荐阅读
- reactjs - Submit form on enter form react component child
- firebase - Firebase onDisconnect re-connection
- c# - 如何对两个字符串求和并添加到列表类?
- c# - DryIoc open generic interception with castle core
- python - How to find the minimum number of containers to complete a certain number of jobs?
- python - Python SSH 隧道进入 EC2 并连接到 DocumentDB
- java - Windows 10 主页上的 docker-compose up 问题“exec:未找到”
- python - Python: Display all options of a Unix wildcarded string with square brackets (reverse glob/fnmatch)
- javascript - Is it possible to disable Plotly showing pie chart textinfo if the value is equal to 0
- r - Loop through files in R and select rows by string