这是原始数据集
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
列以升序排列。空单元格是实际的空格,请使用replace
,ffill
和drop_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/