我有以下大熊猫数据框,它由几个术语组成:

type    name    exp
-------------------
feline  tiger  True
feline  cat    False
rodent  rabbit True
canine  dog    False
feline  puma   True
feline  bobcat False


是否可以将name列中具有相同类型的type列中的所有术语合并到同一单元格中?例如:

type    name                  exp
----------------------------------
feline  tiger cat puma bobcat True
rodent  rabbit                True
canine  dog                   False

最佳答案

使用df.groupby

In [200]: df_grouped = df.groupby('type', sort=False, as_index=False)


第一个句柄name

In [202]: df_grouped['name'].apply(lambda x: ' '.join(x))
Out[202]:
0    tiger cat puma bobcat
1                   rabbit
2                      dog
dtype: object


现在,处理exp

In [203]: df_grouped['exp'].apply(any)
Out[203]:
0     True
1     True
2    False
dtype: bool




把它放在一起:

In [219]: df_grouped = df.groupby('type', sort=False, as_index=False).agg({'name' : ' '.join, 'exp' : any}); df_grouped
Out[219]:
     type                   name    exp
0  feline  tiger cat puma bobcat   True
1  rodent                 rabbit   True
2  canine                    dog  False




要仅保留唯一项,请将lambda传递给name

df.groupby('type', sort=False, as_index=False)\
       .agg({'name' : lambda x: ' '.join(set(x)), 'exp' : any})

07-26 05:25