prev_staff DataFrame 包含电子邮件和真/假标志。我想用另一个 DataFrame 更新这个标志,其中包含一个电子邮件子列表和一个全部设置为 true 的标志。 我正在寻找一种更有效的方法来更新列值,而不必从生成的合并中删除和重命名列。 原始列是 lunchable,但合并生成 lunchable_x 和 y,我想避免必须对其进行管理。
new_staff = pd.merge(prev_staff,new_staff_emails, on='email',how='left')
new_staff['lunchable_x'] = new_staff['lunchable_y']
new_staff = new_staff.drop(columns=['lunchable_y'])
new_staff = new_staff.rename(columns={'lunchable_x': 'lunchable'})
new_staff['lunchable'].fillna('false', inplace=True)
new_staff.to_csv(path + 'staff.csv')
new_staff columns
Index(['user_id', 'name', 'email', 'start_date', 'table', 'team', 'specialty',
'lunchable', 'previous_lunches'],
dtype='object')
new_staff_emails columns
Index(['email', 'lunchable'], dtype='object')
prev_staff columns
Index(['user_id', 'name', 'email', 'start_date', 'table', 'team', 'specialty',
'lunchable', 'previous_lunches'],
dtype='object')
最佳答案
您可以直接在 new_staff
中设置 lunchable
的值,而不是加入:
new_staff.loc[new_staff["email"].isin(prev_staff["email"]), "lunchable"] = True
此代码将为 new_staff
中所有也在 prev_staff
中的电子邮件设置 new_staff["lunchable"] = True
。
关于python - 加入 DataFrames 以更新原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51385417/