熊猫重复的行缺少值

时间:2020-04-27 15:08:06

标签: python pandas duplicates

你好,我有一个包含重复项的数据框。

df = pd.DataFrame({'id':[1,1,1], 
                   'name':['Hamburg','Hamburg','Hamburg'], 
                   'country':['Germany','Germany',None],
                   'state':[None,None,'Hamburg']})

使用df.drop_duplicates()删除重复项将返回:

enter image description here

如何配置drop_duplicates使得只剩下一行包含所有信息?

2 个答案:

答案 0 :(得分:1)

在您的特殊情况下,这是我的建议:

import pandas
df = pandas.DataFrame({'id':[1,1,1,2,2], 
                   'name':['Hamburg','Hamburg','Hamburg','Paris','Paris'], 
                   'country':['Germany','Germany',None, None, 'France'],
                   'state':[None,None,'Hamburg', 'Paris', None]})

df_result=pandas.DataFrame()
for id in df['id'].unique().tolist() :
    df_subset=df[df['id']==id].copy(deep=True)
    df_subset.sort_values(by=['id','name','country','state'],inplace=True)
    df_subset.bfill(inplace=True)
    df_subset.ffill(inplace=True)
    df_subset.drop_duplicates(inplace=True)
    df_result=df_result.append(df_subset)

df=df_result

Out[18]: 
   id     name  country    state
0   1  Hamburg  Germany  Hamburg
4   2    Paris   France    Paris

子集化记录将避免填充或填充以填充相邻但不同的id记录。

致谢

答案 1 :(得分:1)

在一次没有所有信息的行的情况下,可以使用groupbyfirst,但首先fillna不使用np.nan来处理缺失值:

print (df.fillna(value=np.nan).groupby('id').first())
       name  country    state
id                           
1   Hamburg  Germany  Hamburg