这是原始数据集

id         firstname    lastname      email               update date
A1         wendy         smith         [email protected]        2018-01-02
A1         wendy         smith         [email protected]     2019-02-03
A2         harry         lynn          [email protected]      2016-04-03
A2         harry                       [email protected]  2019-03-12
A3         tinna         dickey        [email protected]      2016-04-03
A3         tinna         dickey        776-3384-333       2019-03-12


我的设计是对具有相同ID的行进行分组,如果某些具有相同ID的列包含不同的值,请保留最新的值。
所以结果应该是这样的:

id         firstname    lastname      email               update date
A1         wendy         smith         [email protected]     2019-02-03
A2         harry         lynn          [email protected]  2019-03-12
A3         tinna         dickey        [email protected]      2019-03-12


目前,我尝试使用pandas groupby对具有相同值的单元格进行分组,并在一个单元格中将不同的值保留为“,”,以备后用(删除早期数据,使一个单元格成为一个数据)。伯特,我想我在做什么是不对的...

df=df.groupby(['id']).agg({'first_name': lambda x:','.join(set(x))})


如果最新值是错误的值,我需要将冲突值存储到新列中以进行后续清理吗?

任何帮助将不胜感激!

最佳答案

如果您的update_date列以升序排列。空单元格是实际的空格,请使用replaceffilldrop_duplicates

df_new = df.replace('', np.NaN).ffill().drop_duplicates('id', keep='last')


如果您的空白单元格是NaN,请使用:

df_new = df.ffill().drop_duplicates('id', keep='last')


输出量

   id firstname lastname              email update date
1  A1     wendy    smith     [email protected]  2019-02-03
3  A2     harry     lynn  [email protected]  2019-03-12


如果您的数据未排序,请首先执行以下操作:

df = df.sort_values(['id', 'update date'])

关于python - 将具有相同ID的行分组,pandas/python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58183895/

10-09 07:51