Pandas/Python基于特定行值删除重复项
我正在尝试根据多个条件删除重复项:Pandas/Python基于特定行值删除重复项,python,pandas,dataframe,duplicates,loc,Python,Pandas,Dataframe,Duplicates,Loc,我正在尝试根据多个条件删除重复项: 在列df['A'] 检查列df['status']并将OK与Open和Open与Close区分优先级 如果我们有一个状态相同的副本,则根据df['Col\u 1] df=pd.DataFrame({'A':['11','11','12',np.nan','13','13','14','14','15'], '状态':['OK','Close','Close','OK','OK','Open','Open','Open','Open',np.nan], “
df['A']
df['status']
并将OK与Open和Open与Close区分优先级
df['Col\u 1]
为优先排序
状态创建有序分类,然后按所有列排序,按第一列A
和最后一个排序索引删除重复项:
c = ['OK','Open','Close']
df['Status'] = pd.Categorical(df['Status'], ordered=True, categories=c)
df = df.sort_values(['A','Status','Col_1']).drop_duplicates('A').sort_index()
print (df)
A Status Col_1
0 11 OK 2000
2 12 Close 2000
3 NaN OK 2000
4 13 OK 2000
6 14 Open 2000
8 15 NaN 2000
如果需要,请编辑避免删除“添加帮助程序”列中的NaN
s:
df['test'] = df['A'].isna().cumsum()
c = ['OK','Open','Close']
df['Status'] = pd.Categorical(df['Status'], ordered=True, categories=c)
df = (df.sort_values(['A','Status','Col_1', 'test'])
.drop_duplicates(['A', 'test'])
.sort_index())
非常感谢,如果我们有多个NaN,是否有办法将所有NaN保留在a列中?我刚刚意识到,代码在日期中的一部分工作正常,而日期不是由最新的NaN选择的one@Caiotru-你能解释更多吗?@Caiotru-一个想法-日期是字符串吗?还是约会时间?或者数字?例如,如果我有两个代码相同的OK,我希望选择最新的日期,如果它们是有序的,我希望保留='last'