python - Pandas:根据条件求和字符串

标签 python pandas

我有数据框

member_id   event_path  event_duration
111 vk.com  2
111 vk.com  3
111 facebook.com    1
111 facebook.com    4
111 facebook.com    20

如果 event_path[i] == event_path[i-1]event_duration < 5 ,我需要连接字符串。 我用的是

df = df.groupby(['member_id', 'event_path'],
                sort=False,
                as_index=False)['event_duration'].sum().where(df['event_duration'] < 5)

但它返回

ValueError: cannot reindex from a duplicate axis

期望输出

111 vk.com  5
111 facebook.com    5
111 facebook.com    20

最佳答案

我不太清楚你的问题,但我假设对于每个成员和路径组合,你想要将所有小于 5 的值相加?如果是这样,我们可以通过分离高于和低于 5 的值,然后对低于 5 的值求和并合并我们得到的两个帧来实现此目的:

import pandas as pd

df = pd.DataFrame({'member_id': [111, 111, 111, 111, 111],
                   'event_path': ['vk.com', 'vk.com', 'facebook.com', 'facebook.com', 'facebook.com'],
                   'event_duration': [2, 3, 1, 4, 20]
                   })

sums = df[df['event_duration'] < 5].groupby(['event_path', 'member_id'], as_index=False).sum()
large = df[df['event_duration'] >= 5]

final = pd.concat([sums, large])

print final

打印输出:

   event_duration    event_path  member_id
0               5  facebook.com        111
1               5        vk.com        111
4              20  facebook.com        111

关于python - Pandas:根据条件求和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42506426/

相关文章:

python - 使用 matplotlib 绘制直方图或散点图

python - 使用 `event` 的多处理暂停-重启功能

python - 按破折号 '-' 的第一次出现和最后一次出现拆分数据框文本列

python - Python中 "in"的关联性?

python - 比较python中的opencv lineartoPolar()转换

python - 以 3 为一组分配列值 - Python

python - bool 掩码,如果 df 的时间戳与第二个 df 的两个时间点 - python

python - 包含列表的 Pandas 数据框列,获取两个连续行的交集

python - Tkinter Text 关闭但 ipython 控制台继续无限期运行

python - 通过保持行子集的最小值,从旧的 panda 数据帧生成新的 panda 数据帧