python - 迭代数据帧时所做的更改不会保存

标签 python pandas dataframe duplicates

我有一个数据框,在某种程度上有“重复”行。假设我有一行 A = ['name' : john, 'age' : 15, 'email' : NaN, 'school' : middle] 和一行 B = ['姓名':约翰,'年龄':15,'电子邮件':john@gmail.com,'学校':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 是我拥有所有数据的数据框的名称。然后我只将重复的行切成重复。之后,我迭代数据框并尝试进行更改。但我所做的改变最终会丢失或者发生什么。我做错了什么?

最佳答案

我们可以通过两种方式解决您的问题:

方法 1:使用 bfillffilldrop_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

关于python - 迭代数据帧时所做的更改不会保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58961647/

相关文章:

python - 从 python 中的 pandas 数据框中检索信息

python - Pandas 数据框枢轴不适合内存

python - Dask Dataframe groupby 没有 len()

python - 将计算列附加到现有数据框

python - Django Restful 中的 ListSerializer - 何时调用?

具有流式传输能力的 Python JSON RPC 服务器

python - Django 如何在 Amazon S3 中存储 HTML 文件

python - Pandas 以最小的差距绘制时间序列

python - 遍历 pandas 坐标组并计算距离

python - Pandas:使用 set_categories 时获取 SettingWithCopyWarning