python - 迭代数据框时所做的更改不保存
问题描述
我有一个在某种程度上具有“重复”行的数据框。假设我有一排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
. 之后,我遍历数据框并尝试随时进行更改。但是我所做的更改最终会丢失或其他东西。我究竟做错了什么?
解决方案
我们可以通过两种方式解决您的问题:
方法 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
推荐阅读
- typescript - 如何将扩展方法添加到现有类
- sql - 具有 2 列子连接的 HQL 查询
- javascript - 按天和项目总计分组,但输出项目名称作为键
- regex - Perl:请求改进我的 REGEX(仅与正/负整数/小数和逗号匹配)
- c++ - boost::asio 简单身份流
- jquery - Froala - 如何在颜色弹出窗口中添加更多选项卡或添加自定义颜色按钮?
- android - 如何让我的应用通过 NFC 发送蓝牙配对请求
- angular - ngModel,单击在动态添加的 html 中无法以 Angular 4 工作
- javascript - Nodejs创建连接工厂
- laravel - 发生错误时如何使用会话消息将用户重定向到另一个页面