Tho*_* W. 3 python count pandas
我通常value_counts()用来获取某个值的出现次数。但是,我现在处理大型数据库表(无法将其完全加载到 RAM 中)并在不到 1 个月的时间内查询数据。
有没有办法存储结果value_counts()并将其与/添加到下一个结果中?
我想计算用户操作的数量。假设用户活动日志的结构如下:
# month 1
id userId actionType
1 1 a
2 1 c
3 2 a
4 3 a
5 3 b
# month 2
id userId actionType
6 1 b
7 1 b
8 2 a
9 3 c
Run Code Online (Sandbox Code Playgroud)
value_counts()在这些产品上使用:
# month 1
userId
1 2
2 1
3 2
# month 2
userId
1 2
2 1
3 1
Run Code Online (Sandbox Code Playgroud)
预期输出:
# month 1+2
userId
1 4
2 2
3 3
Run Code Online (Sandbox Code Playgroud)
到目前为止,我刚刚找到了一种使用 groupby 和 sum 的方法:
# count users actions and remember them in new column
df1['count'] = df1.groupby(['userId'], sort=False)['id'].transform('count')
# delete not necessary columns
df1 = df1[['userId', 'count']]
# delete not necessary rows
df1 = df1.drop_duplicates(subset=['userId'])
# repeat
df2['count'] = df2.groupby(['userId'], sort=False)['id'].transform('count')
df2 = df2[['userId', 'count']]
df2 = df2.drop_duplicates(subset=['userId'])
# merge and sum up
print pd.concat([df1,df2]).groupby(['userId'], sort=False).sum()
Run Code Online (Sandbox Code Playgroud)
pythonic / pandas有效合并多个系列(和数据帧)信息的方法是什么?
让我建议“添加”并将填充值指定为 0。这比之前建议的答案有优势,因为当两个数据帧具有不同的唯一键集时,它会起作用。
# Create frames
df1= pd.DataFrame({'User_id': ['a','a','b','c','c','d'],'a':[1,1,2,3,3,5]})
df2= pd.DataFrame({'User_id': ['a','a','b','b','c','c','c'],'a' [1,1,2,2,3,3,4]})
Run Code Online (Sandbox Code Playgroud)
现在添加两组 values_counts()。fill_value 参数将处理可能出现的任何 NaN 值,在本例中,出现在 df1 中的“d”,但不出现在 df2 中。
a = df1.User_id.value_counts()
b = df2.User_id.value_counts()
a.add(b,fill_value=0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5974 次 |
| 最近记录: |