根据大熊猫在groupby期间是否根据列包含特定字符串来创建变量

时间:2018-12-04 05:53:09

标签: pandas group-by

我有以下数据表示一个人使用不同服务的次数:

account     site                        hitCount
243601      auth.svcs.facebook.com      3
243601      auth.svcs.facebook.com      1
243601      respframework.facebook.com  2
243601      respframework.facebook.com  1
243601      auth.svcs.facebook.com      6
243601      auth.svcs.facebook.com      2
243601      pie.prod.facebook.com       1
243601      profile.facebook.com        5
243601      respframework.facebook.com  4
243601      mediasearch.facebook.com    1
243601      pie.prod.facebook.com       2
243601      auth.svcs.facebook.com      1
243601      auth.svcs.facebook.com      1
243601      respframework.facebook.com  1
243601      profile.facebook.com        2
243601      auth.svcs.facebook.com      4
243601      collaborateext.facebook.com 1
243601      auth.svcs.facebook.com      1
243601      auth.svcs.facebook.com      2
243601      auth.svcs.facebook.com      4
243601      www.facebook.com            2

样本数据适用于1位客户。原始数据大约有8万个客户。

我正在按帐户进行分组,以得出点击量的总和,如下所示:

df_hits.groupby(level = 0)['hitCount'].sum().reset_index()

但是,我还需要再创建3个变量,如下所示:

account hitCount    profile_hit profile_hit_count   non_profile_hit_count
243601  47          1           2                   45
  • profile_hit是一个二进制标志,表示网站是否包含“个人资料”。
  • profile_hit_count是帐户访问数据中包含配置文件(profile.facebook.com)的网站的次数。
  • non_profile_hit_count是hitCOunt-profile_hit_count。

我不确定在分组依据期间如何创建其他变量。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

#create new column for check string profile and cast to integers
df_hits =df_hits.assign(profile_hit_count=df_hits['site'].str.contains('profile').astype(int))
#aggregate `sum` twice - for profile_hit_count for count aocurencies
df = df_hits.groupby(level = 0).agg({'hitCount':'sum', 'profile_hit_count':'sum'})
#difference
df['non_profile_hit_count'] = df['hitCount'] - df['profile_hit_count']
#check if not 0 and cast to integer if necessary
df['profile_hit'] = df['profile_hit_count'].ne(0).astype(int)
print (df)
         hitCount  profile_hit_count  non_profile_hit_count  profile_hit
account                                                                 
243601         47                  2                     45            1