你好,我有一个包含重复项的数据框。
df = pd.DataFrame({'id':[1,1,1],
'name':['Hamburg','Hamburg','Hamburg'],
'country':['Germany','Germany',None],
'state':[None,None,'Hamburg']})
使用df.drop_duplicates()
删除重复项将返回:
如何配置drop_duplicates
使得只剩下一行包含所有信息?
答案 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)
在一次没有所有信息的行的情况下,可以使用groupby
和first
,但首先fillna
不使用np.nan
来处理缺失值:
print (df.fillna(value=np.nan).groupby('id').first())
name country state
id
1 Hamburg Germany Hamburg