熊猫:联合重复的字符串

Pet*_*rov 5 python pandas

我有数据帧

ID     url     date   active_seconds
111    vk.com   12.01.2016   5
111    facebook.com   12.01.2016   4
111    facebook.com   12.01.2016   3
111    twitter.com    12.01.2016    12
222    vk.com      12.01.2016   8
222    twitter.com    12.01.2016   34
111    facebook.com   12.01.2016   5
Run Code Online (Sandbox Code Playgroud)

我需要得到

ID     url     date   active_seconds
111    vk.com   12.01.2016   5
111    facebook.com   12.01.2016   7
111    twitter.com    12.01.2016    12
222    vk.com      12.01.2016   8
222    twitter.com    12.01.2016   34
111    facebook.com   12.01.2016   5
Run Code Online (Sandbox Code Playgroud)

如果我试试

df.groupby(['ID', 'url'])['active_seconds'].sum()
Run Code Online (Sandbox Code Playgroud)

它结合所有的字符串.我该怎么做才能获得理想?

piR*_*red 3

  • (s != s.shift()).cumsum()是识别连续标识符组的典型方法
  • pd.DataFrame.assign是一种向数据框副本添加新列并链接更多方法的便捷方法
  • pivot_table允许我们重新配置我们的表并聚合
  • args- 这是我的风格偏好,以保持代码更简洁。我将把这些参数传递给pivot_tablevia*args
  • reset_index* 2 清理并得到最终结果

args = ('active_seconds', ['g', 'ID', 'url', 'date'], None, 'sum')
df.assign(g=df.ID.ne(df.ID.shift()).cumsum()).pivot_table(*args) \
    .reset_index([1, 2, 3]).reset_index(drop=True)

    ID           url        date  active_seconds
0  111  facebook.com  12.01.2016               7
1  111   twitter.com  12.01.2016              12
2  111        vk.com  12.01.2016               5
3  222   twitter.com  12.01.2016              34
4  222        vk.com  12.01.2016               8
5  111  facebook.com  12.01.2016               5
Run Code Online (Sandbox Code Playgroud)