我通常使用value_counts()
来获取一个值出现的次数,但是,我现在要处理的是大型数据库表(无法将其完全加载到RAM中),并且要查询一个月内的数据。
是否有办法存储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
在这些上使用value_counts()
会产生:
# month 1
userId
1 2
2 1
3 2
# month 2
userId
1 2
2 1
3 1
预期产出:
# month 1+2
userId
1 4
2 2
3 3
到目前为止,我只是找到了一个使用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()
pythonic/panda如何有效地合并多个序列(和 Dataframe )的信息?
3条答案
按热度按时间ergxz8rk1#
我建议使用“add”并将填充值指定为0。与前面建议的答案相比,这有一个优点,即当两个Dataframe具有不相同的唯一键集时,它将工作。
现在添加两组values_counts(),
fill_value
参数将处理可能出现的任何NaN值,在本例中,“d”出现在df1
中,而不是df2
中。y4ekin9u2#
可以直接对
value_counts
方法生成的series
求和:对级数求和:
输出:
cs7cruho3#
这就是所谓的“拆分-应用-合并”。它是在1行和3-4次点击中完成的,使用一个lambda函数如下。
1️将以下内容粘贴到代码中:
2️将3x
label
替换为要计算其值的列的名称(区分大小写)3️打印df.head()以检查它是否正确工作