从数据框中创建具有相同键的列表

Create a list with same keys from a dataframe

          Name         Adress       Voor        Hoofd         Na     Dish
0   Aisha_BStraat15 BStraat15   BStraat13   BStraat15   AStraat22   Hoofd
1   Aline_AStraat29 AStraat29   AStraat48   AStraat29   AStraat81   Hoofd
2   Alma_BStraat21  BStraat21   AStraat53   BStraat51   BStraat21   Na
9   Bel_BStraat20   BStraat20   AStraat48   BStraat20   AStraat77   Hoofd
10  Berry_AStraat32 AStraat32   BStraat8    AStraat32   AStraat77   Hoofd
47  Math_AStraat77  AStraat77   BStraat58   AStraat57   AStraat77   Na

这是我的数据框的一部分。它正在计划一项活动,其中包含三道名为 Voor、Hoofd 和 Na 的菜肴。每个地址准备一道菜,在最后一个格子里看。在同名 Voor Hoofd 和 Na 的单元格中,您会看到人们必须吃这道菜的地址。

我想为列表中的每个名字制作一个列表,名字在活动中遇到的名字,例如:Math_Astraat77 在活动中遇到了 Berry_AStraat32 和 Bel_BStraat20。

可能的输出:

[Math_Astraat77, Berry_AStraat32, Bel_BStraat20]

对于不好的解释我深表歉意,我第一次使用这个论坛并且我的英语不是很好atm。

显然 df.groupby("Na")["Name"].agg(list) 也可以工作,但工作量要少得多。 (一切都是为了学习)。

df.groupby("Na")["Name"].agg([",".join])["join"].apply(lambda x: x.split(","))

#output

Na
AStraat22                                   [Aisha_BStraat15]
AStraat77    [Bel_BStraat20, Berry_AStraat32, Math_AStraat77]
AStraat81                                   [Aline_AStraat29]
BStraat21                                    [Alma_BStraat21]
Name: join, dtype: object

这是你想要的吗?

df.groupby("Na")["Name"].agg([",".join])["join"].\
apply(lambda x: x.split(",") if len(x.split(","))>1 else x)

#output

Na
AStraat22                                     Aisha_BStraat15
AStraat77    [Bel_BStraat20, Berry_AStraat32, Math_AStraat77]
AStraat81                                     Aline_AStraat29
BStraat21                                      Alma_BStraat21
Name: join, dtype: object