熊猫数据框根据条件冻结

时间:2018-11-05 22:38:12

标签: python pandas list dataframe frozenset

我有一个像这样的数据集:

saveList(items, extraString);

我希望以相同的方式拥有节点列的Frozenset。因此,预期结果如下:

 node    community
  1         2
  2         4
  3         5
  4         2
  5         3
  7         1
  8         3
  10        4
  12        5

有什么方法可以做到,而无需将数据框更改为列表列表。 谢谢。

2 个答案:

答案 0 :(得分:2)

GroupBy + applyfrozenset一起使用:

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')]