两个Pandas + Map + Group by(两个变量)+ count

时间:2018-06-08 12:50:44

标签: python pandas dictionary pandas-groupby

我有两个数据框:客户端和消息

对于每个客户,有几条消息。两者都有日期(我从中提取日期)。这意味着客户是他们注册的那一天;消息发送当天的消息。

我可以通过以下方式了解为每个客户发送的总消息:

clients['total'] = clients['ID'].map(messages.groupby(['ID']).counts())

但是:我怎样才能将其扩展到计算他们注册当天发送的邮件数量,而不是整个期间?我尝试按两个变量分组

clients['totalDay1'] = clients['ID'].map(messages.groupby(['ID','Day']).counts())

但是我没有得到我想要的地方,那就是将价值添加到客户端df。

谢谢! 米格尔

1 个答案:

答案 0 :(得分:0)

我认为需要join

s = messages.groupby(['ID','Day']).size().rename('totalDay1')
clients = clients.join(s, on=['ID','Day'])

样品:

messages = pd.DataFrame({'ID':[1,2,3], 'Day':[1,2,2], 'col':[3,4,5]})
clients = pd.DataFrame({'ID':[1,2,5], 'Day':[1,2,2], 'col':[4,5,6]})

s = messages.groupby(['ID','Day']).size().rename('totalDay1')
clients = clients.join(s,  on=['ID','Day'])
print (clients)
   ID  Day  col  totalDay1
0   1    1    4        1.0
1   2    2    5        1.0
2   5    2    6        NaN