我有一个非常大的数据框,里面有图书ID和合著每本书的人的名字。我想计算一下每个作者在整个职业生涯中与多少“独特”的合著者共事过。你知道吗
例如:
BookID Author
1 John
1 Alex
1 Jenna
2 John
2 Alex
3 John
4 Alex
4 Mary
4 Max
预期结果将是(括号之间的内容不是必需的,但我把它放在那里是为了更好地证明,我只想要数字):
Author Num_Unique_CoAuthors
John 2 (Alex and Jenna)
Alex 4 (John, Jenna, Mary and Max)
Jenna 2 (Alex and John)
Mary 2 (Alex and Max)
Max 2 (Alex and Mary)
首先为每个组创建} 移除空集,最后将值展平到新集以获得唯一,最后获取长度:
set
到新列,然后获得与Author
列的差异,通过^{我有另一个解决办法。你知道吗
BookID
另一种方法
第一个groupby
BookID
和list all authors per book (i.e. list all authors per group)接下来,在
BookID
上与主数据合并,以获得每个作者的所有作者Author_x
是完整的作者列表,包括Author_y
。现在可以使用以下方法将完整的作者列表(Author_x
)与每个单独/唯一的作者(Author_y
)进行比较Author_y
列对上述步骤中的合并数据帧进行切片;这将在dict键中为author提供所有authorsAuthor_x
)作为扁平列表最后,放入
DataFrame
并计算每行的非空值扩展数据案例
如果主数据包含单个作者(即没有任何共同作者),则此方法为该行打印零
下面是添加到数据中的虚拟行,只有一个作者
这是输出
初始答案
你有没有用
sum
聚合来尝试groupby
相关问题 更多 >
编程相关推荐