根据条件合并数据框架



我有一个数据框架df

id  email   firstname   lastname    salutation
2be858a0458faa569d3d    user_a@gmail.com                Lastname    
2be858a0458faa569d3d    user_a@gmail.com    Firstname       
2be858a0458faa569d3d    user_a@gmail.com    Firstname                Mr

我想要一个合并的数据框架df_consolidated

2be858a0458faa569d3d    user_a@gmail.com    Firstname   Lastname Mr

逻辑应该是它取df和"sum "中的所有值

任何想法?

您可以使用groupby_first:

>>> df.groupby('id', as_index=False).first()
id             email  firstname  lastname salutation
0  2be858a0458faa569d3d  user_a@gmail.com  Firstname  Lastname         Mr

如果空值是空字符串,可以先用np.nan代替'':

>>> df.replace({'': np.nan}).groupby('id', as_index=False).first()
id             email  firstname  lastname salutation
0  2be858a0458faa569d3d  user_a@gmail.com  Firstname  Lastname         Mr

您需要某种被认为是"相同"的标识符。

如果所有的行都是相同的,而你只想要一行,你可以使用:

df.drop_duplicates()

或者@Corralien的答案

如果所有应该聚合的行共享一个特定的特征,例如:'id'你可以使用:

df.groupby(['id']).apply(set)

,它将为每个id和列返回1行和一组唯一值。python中的set是无序的,所以如果顺序很重要,你可以使用字典的键作为替换,见这里:Python有有序集合吗?

最新更新