我有一个像这样的数据集:
saveList(items, extraString);
我希望以相同的方式拥有节点列的Frozenset。因此,预期结果如下:
node community
1 2
2 4
3 5
4 2
5 3
7 1
8 3
10 4
12 5
有什么方法可以做到,而无需将数据框更改为列表列表。 谢谢。
答案 0 :(得分:2)
将GroupBy
+ apply
与frozenset
一起使用:
res = df.groupby('community')['node'].apply(frozenset).values.tolist()
print(res)
[frozenset({7}), frozenset({1, 4}), frozenset({8, 5}),
frozenset({2, 10}), frozenset({3, 12})]
答案 1 :(得分:2)
我建议您遍历您的GroupBy
对象并发出一个地图。
communities = {k: frozenset(g['node']) for k, g in df.groupby('community')}
print(communities)
{1: frozenset({7}),
2: frozenset({1, 4}),
3: frozenset({5, 8}),
4: frozenset({2, 10}),
5: frozenset({3, 12})}
或者,如果您想要一个列表(您会丢失按键信息),那么
communities = [frozenset(g['node']) for _, g in df.groupby('community')]