如何将每个组的重复项替换为 NaN,同时保留行?
我需要保留行而不是删除,并且可能还要保留首次出现的原始值。
import pandas as pd
from datetime import timedelta
df = pd.DataFrame({
'date': ['2019-01-01 00:00:00','2019-01-01 01:00:00','2019-01-01 02:00:00', '2019-01-01 03:00:00',
'2019-09-01 02:00:00','2019-09-01 03:00:00','2019-09-01 04:00:00', '2019-09-01 05:00:00'],
'value': [10,10,10,10,12,12,12,12],
'ID': ['Jackie','Jackie','Jackie','Jackie','Zoop','Zoop','Zoop','Zoop',]
})
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)
date value ID
0 2019-01-01 00:00:00 10 Jackie
1 2019-01-01 01:00:00 10 Jackie
2 2019-01-01 02:00:00 10 Jackie
3 2019-01-01 03:00:00 10 Jackie
4 2019-09-01 02:00:00 12 Zoop
5 2019-09-01 03:00:00 12 Zoop
6 2019-09-01 04:00:00 12 Zoop
7 2019-09-01 05:00:00 12 Zoop
期望的数据框:
date value ID
0 2019-01-01 00:00:00 10 Jackie
1 2019-01-01 01:00:00 NaN Jackie
2 2019-01-01 02:00:00 NaN Jackie
3 2019-01-01 03:00:00 NaN Jackie
4 2019-09-01 02:00:00 12 Zoop
5 2019-09-01 03:00:00 NaN Zoop
6 2019-09-01 04:00:00 NaN Zoop
7 2019-09-01 05:00:00 NaN Zoop
编辑:
重复值应该只在相同日期上被删除,不考虑频率。因此,如果值10在1月1日出现两次,在1月2日出现三次,则值10应该仅在1月1日和1月2日各显示一次。
pd.NA
,无需为了使用np.nan
而导入numpy。 - Trenton McKinneypd.NA
和np.nan
的行为可以非常不同。它们并不一定是可互换的。 - rafaelcpd.NA
和np.nan
之间的区别。 - Andy L.pd.NA
,并意识到当创建一个由ints
或floats
组成的列时,pd.NA
会导致该列成为object
类型。同样,pd.NA
强制'value'
的type
变为object
。因此,我撤回我的建议。 - Trenton McKinney