大Pandas若干价值观系列的合并与总结

2024-06-28 19:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我通常使用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

在这些产品上使用value_counts()

^{pr2}$

预期产量:

# 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/pandas高效地合并多个系列(和数据帧)的信息的方法是什么?在


Tags: 数据用户idfalsevaluecountsortdf1
3条回答

您可以直接对value_counts方法生成的series求和:

#create frames
df= pd.DataFrame({'User_id': ['a','a','b','c','c'],'a':[1,1,2,3,3]})
df1= pd.DataFrame({'User_id': ['a','a','b','b','c','c','c'],'a':[1,1,2,2,3,3,4]})

对系列求和:

^{pr2}$

输出:

a    4
b    3
c    5
dtype: int64

这就是所谓的“分离-应用-联合”。使用如下lambda函数,只需1行和3-4次单击即可完成。

1️⃣将此粘贴到代码中:

df['total_for_this_label'] = df.groupby('label', as_index=False)['label'].transform(lambda x: x.count())

2️⃣将3xlabel替换为正在计算其值的列的名称(区分大小写)

3️⃣打印测向头()检查它是否正常工作

我建议使用“add”并指定填充值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]})

现在添加两组值\u counts()。fill\u value参数将处理任何出现的NaN值,在本例中,是出现在df1中的'd',而不是df2。在

^{pr2}$

相关问题 更多 >