优化pandas过滤器内部应用函数

2024-05-23 21:48:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个成对的列表——存储在一个数据帧中——每对有一个“a”列和一个“b”列。对于每一对,我要返回具有相同“a”的“b”。例如,给定以下一组对:

     a    b
0    c    d
1    e    f
2    c    g
3    e    h 
4    i    j
5    e    k

最后我想说:

^{pr2}$

我可以用以下方法来实现:

def equivalents(x):
    l = pairs[pairs["a"] == x["a"]]["b"].tolist()
    return l[1:] if l else l

pairs["equivalents"] = pairs.apply(equivalents, axis = 1)

但在大型电视台(如100多万对)上,速度慢得令人痛苦。有什么建议可以让我做得更快?在


Tags: 数据方法列表returnifdefelse速度慢
1条回答
网友
1楼 · 发布于 2024-05-23 21:48:30

我想这应该快一点。首先,把它们加起来。在

df['equiv'] = df.groupby('a')['b'].transform(sum)

   a  b equiv
0  c  d    dg
1  e  f   fhk
2  c  g    dg
3  e  h   fhk
4  i  j     j
5  e  k   fhk

现在转换成一个列表,删除列“b”中已有的字母。在

^{pr2}$

相关问题 更多 >