我有一个数据框df
ID active_seconds domain subdomain search_engine search_term
0120bc30e78ba5582617a9f3d6dfd8ca 35 vk.com vk.com None None
0120bc30e78ba5582617a9f3d6dfd8ca 54 vk.com vk.com None None
0120bc30e78ba5582617a9f3d6dfd8ca 34 vk.com vk.com None None
16c28c057720ab9fbbb5ee53357eadb7 4 facebook.com facebook.com None None
16c28c057720ab9fbbb5ee53357eadb7 4 facebook.com facebook.com None None
16c28c057720ab9fbbb5ee53357eadb7 8 facebook.com facebook.com None None
0120bc30e78ba5582617a9f3d6dfd8ca 16 megarand.ru megarand.ru None None
0120bc30e78ba5582617a9f3d6dfd8ca 6 vk.com vk.com None None
我需要更改df
。如果要ID
subdomain[i] == subdomain[i-1]
,我应该将此字符串与active_seconds[i-1] + active_seconds[i]
结合使用。
从这个df我想得到
ID active_seconds domain subdomain search_engine search_term
0120bc30e78ba5582617a9f3d6dfd8ca 123 vk.com vk.com None None
16c28c057720ab9fbbb5ee53357eadb7 16 facebook.com facebook.com None None
0120bc30e78ba5582617a9f3d6dfd8ca 16 megarand.ru megarand.ru None None
0120bc30e78ba5582617a9f3d6dfd8ca 6 vk.com vk.com None None
我可以用它来做什么?
答案 0 :(得分:2)
这真的很接近。不确定订单是否正确对您来说很重要。
另外,我假设我应该groupby
ID
。这意味着,如果相同的ID
跨越另一个ID
但仍位于同一子域中,我将汇总active_seconds
。
def proc_id(df):
cond = df.subdomain != df.subdomain.shift()
part = cond.cumsum()
df_ = df.groupby(part).first()
df_.active_seconds = df.groupby(part).active_seconds.sum()
return df_
df.groupby('ID').apply(proc_id).reset_index(drop=True)