我有一个数据框,该数据框在某种程度上具有“重复”行。假设我有A = ['name' : john, 'age' : 15, 'email' : NaN, 'school' : middle]
行和B = ['name' : john, 'age' : 15, 'email' : john@gmail.com, 'school' : NaN]
行。 A和B的结果行应为['name' : john, 'age' : 15, 'email' : john@gmail.com, 'school' : middle]
。
到目前为止,我已经尝试在数据帧上使用iterrows()并更改值,但是更改不会保存。 我的代码:
duplicated = df[df.duplicated(['name', 'age'], keep = False)].sort_values('name')
row_iterator = duplicated.iterrows()
_, last = row_iterator.__next__()
for k, row in row_iterator:
if row['name'] == last['name']:
for i in duplicated.columns:
if row[i] == last[i]:
continue
if pd.isna(row[i]):
row[i] = last[i]
if pd.isna(last[i]):
last[i] = row[i]
last = row
df是我拥有所有数据的数据框的名称。然后,我只将重复的行切成duplicated
。之后,我遍历数据框并尝试进行更改。但是我所做的改变最终还是迷失了。我在做什么错了?
答案 0 :(得分:2)
我们可以通过两种方式解决您的问题:
方法1 :使用bfill
,ffill
和drop_duplicates
:
df = df.bfill().ffill().drop_duplicates()
name age email school
0 john 15 john@gmail.com middle
方法2 :GroupBy.first
:
df = df.groupby(['name', 'age']).first().reset_index()
name age email school
0 john 15 john@gmail.com middle