Pandas groupby基于另一列的条件

史密斯678

我有一个df,例如下面的示例,我正在寻找标识在给定时间段内发送相同文本的用户,例如该示例的<= 60分钟:

user = [1,2,3,4,5,6]
text = ['hello','hello','whats up','not now','not now','hello']
times = ['2010-09-14 16:51:00','2010-09-14 15:59:00',
        '2010-09-14 15:14:00','2010-09-14 14:55:00','2010-09-14 15:47:00','2010-09-14 15:29:00']

df = pd.DataFrame({'userid':user,'message':text,'time':times})

我当前的方法是按向每个文本发送消息的用户列表将文本分组:

group = df.groupby('message')['userid'].apply(list)

然后,我从每个列表中以对值数组的形式返回用户ID的所有可能组合,然后检索每个实例的用户ID文本作为键,以从原始df中检索每个对的每个消息的时间

这种方法有效,但是我一直在尝试寻找更好的方法,根据每个实例之间的时间是否小于指定的时间段(例如本示例为60分钟),有条件地对每个不同文本的用户进行分组来自用户的两条消息之间。因此,用户1和2的“ hello”相距不到60分钟,因此通过条件并将其添加到“ hello”列表中。

因此,该示例的预期输出为:

       userid
"hello" [1,2,6]
"not not" [4,5]

我还没有找到任何确切或类似的解决方案,因此非常感谢您的帮助。可能是我解决问题的方法是错误的!

罗伊2012

不确定这是最优雅的解决方案-但这是使用group-byand的解决方案rolling这种方法的优点是它可以处理大量数据。它不会创建发送相同消息的所有用户和时间的完整笛卡尔乘积。

res = [] 

def collect_users(x):
    if len(x) > 1: 
        s = set(x) 
        if res and res[-1].issubset(s):
            res.pop()

        res.append(set(x))
    return 0 

df.groupby("message").rolling("3600s").agg(collect_users)

结果以集合列表的形式出现:

[{1.0, 2.0, 6.0}, {4.0, 5.0}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于应用于另一列的条件设置pandas DataFrames列值

pandas 使用 groupby 和另一列值添加列条件

pandas 数据框创建一个新列,其值基于另一列上的 groupby sum

基于另一列的 Pandas 数据框缩放列

基于另一列的 Pandas 列值通过或失败

基于Pandas DataFrame中另一列的总和列

基于另一列追加Pandas DataFrame列

Python Pandas分组并基于另一列排除值

Pandas groupby:在基于Pandas groupby组中另一列中的数据选择行之后,如何选择相邻列的数据?

Pandas 基于另一列 python 获取一列中的唯一值

Python pandas:如何更改(复杂)基于另一列的一列?

基于pandas中一列等于另一列的不同行返回值

基于pandas中另一列的类别的一列的子集排列

Pandas:重新排序基于另一列创建的组中一列中的值

Python Pandas:根据另一列更改条件

pandas groupby并更新一列中的值大于另一列中的值的总和

Pandas groupby将一列相对于另一列

一列上的Pandas groupby(),然后在另一列上求和

Pandas groupby:根据另一列中的值更改一列中的值

Python Pandas组基于列并获取最大值,但基于另一列排除

根据另一列的条件更新Pandas DataFrame中的一列

如何根据Pandas中另一列的条件比较同一列中的日期?

基于 groupby 后条件的 Pandas 新列

基于不同其他列的新 Pandas 列,取决于另一列的值

如何替换一列中的重复值以使其基于Pandas中的另一列而唯一?

如何基于带有日期的另一列创建Pandas列?

Python Pandas-基于另一列中先前值的新列

基于pandas中的另一列值将多列的值熔化为单列

如何基于另一列B的值替换Pandas DataFrame列A的值