在多列上将具有相同列值的行分组

时间:2018-09-07 07:23:34

标签: python pandas

我需要找到一种方法来对一列中具有相同值的行进行分组,但是将行分组到多个列中。 我需要实现的是对代表单个对象的行进行分组,这些对象在不同的​​服务上具有不同的ID。

我的熊猫数据框看起来像

SERV1 SERV2 SERV3 SERV4 SERV5 SERV6
8766  NaN   NaN   0989  NaN   NaN   
8766  NaN   5434  NaN   NaN   NaN   
NaN   NaN   5434  3212  NaN   NaN   
NaN   1236  NaN   NaN   NaN   6543
NaN   3456  NaN   7862  NaN   NaN   
NaN   NaN   NaN   7862  NaN   4767

所需的数据框应该看起来像

SERV1   SERV2   SERV3   SERV4         SERV5   SERV6
[8766]  NaN     [5434]  [0989,3212]   NaN     NaN
NaN     [1236]  NaN     NaN           NaN     [6543]   
NaN     [3456]  NaN    [7862]         NaN     [4767]

列表示不同的服务,值表示仅对于该特定列而言唯一的ID(不同列上的值相同,可能会偶然发生,但不应视为代表相同的ID)。

我设法为具有相应值的每一列创建一个字典,但这与我想要的df不同。

使用

df = grouped.aggregate(lambda x: tuple(x))

我可以实现类似的功能,但它仅适用于将单个列分组,而不是将其链接到其他列,它将所有实际上不属于一起的NaN放在一起。

我正在寻找想法/解决方案。 谢谢。

1 个答案:

答案 0 :(得分:0)

还没有找到一个完整的熊猫解决方案,我决定通过使用networkx模块并使用connected_component_subgraphs函数提取子图,然后将结果解压缩到一个数据框中来做到这一点。没那么优雅,但是可以。