在数据帧组中,在一列上包含列表的行

2024-04-20 15:26:25 发布

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

我有以下dataframe(df)(所有列都包含列表,类型除外,都包含字符串)

Type    Components        names
Zebra  [hand,arm,nose]   [bubu,kuku]
Zebra   [eyes,fingers]   [gaga,timber]
Zebra   [paws]           []
Lion    [teeth]          [scar]
Tiger   [fingers]        [figgy]

我想根据类型对它们进行分组,因此输出如下:

Type    Components                           Names
Zebra   [hand,arm,nose,eyes,fingers,paws]    [bubu,kuku,gaga,timber]
Lion    [teeth]                              [scar]
Tiger   [fingers]                            [figgy]

我试过这样的方法:

df.groupby('role')

最后我也没有成功地使用.agg


Tags: 类型dftypecomponentsnosearmhandeyes
1条回答
网友
1楼 · 发布于 2024-04-20 15:26:25

选项1
groupby+sum
未优化,不考虑重复项

df.groupby('Type', sort=False, as_index=False).sum()

    Type                              Components                       names
0  Zebra  [hand, arm, nose, eyes, fingers, paws]  [bubu, kuku, gaga, timber]
1   Lion                                 [teeth]                      [scar]
2  Tiger                               [fingers]                     [figgy]

选项2
groupby+agg+itertools.chain
用于复制,并且非常高效地进行扁平化

from itertools import chain
df.groupby('Type', sort=False, as_index=False).agg(
    lambda x: list(set(chain.from_iterable(x)))
)

    Type                              Components                       names
0  Zebra  [eyes, hand, paws, arm, fingers, nose]  [timber, bubu, gaga, kuku]
1   Lion                                 [teeth]                      [scar]
2  Tiger                               [fingers]                     [figgy]

相关问题 更多 >