我有以下大熊猫数据框,它由几个术语组成:
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})