【发布时间】:2021-09-18 21:22:14
【问题描述】:
我有以下代码:
import pandas as pd
import numpy as np
new = {'name': ['Sheldon', 'Penny', 'Amy', 'Bernadette', 'Raj', 'Howard'],
'episodes': [42, 24, 31, 29, 37, 40],
'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
old = {'name': ['Sheldon', 'Penny', 'Amy', 'Bernadette', 'Raj', 'Howard'],
'episodes': [12, 32, 31, 32, 37, 40],
'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])
df = pd.DataFrame(old, columns = ['name','episodes', 'gender'])
a =df.merge(df1[['name','episodes']],on=['name','episodes'],how='left',indicator=True).loc[lambda x : x['_merge']=='left_only']
这很棒,因为它只突出显示已进行更改的条目。
有没有什么方法可以在同一行代码中添加不同情节的列?目前我正在使用.str.contains[] 进行for循环,但仍然非常慢。我正在寻找可以做到这一点的 lambda 函数。
【问题讨论】:
-
如果你想发现差异,为什么要按
episodes分组? -
@Corralien - 加入两列以查找它们的不同之处。假设数据框对齐,
df.assign(diff=df1.episodes - df.episodes).query('diff != 0')的一种非常复杂的方法。 -
@MichaelSzczesny。我用您对
.query的想法更新了我的答案,以避免创建一个 lambda 函数来评估.loc。
标签: python python-3.x pandas lambda