我有一个数据框架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有有序集合吗?