从数据框中创建具有相同键的列表
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
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