Python 熊猫会删除一列中具有条件的重复项
我有这样一个数据帧:Python 熊猫会删除一列中具有条件的重复项,python,pandas,Python,Pandas,我有这样一个数据帧: A B 239616412 none 239616414 name2 239616417 none 239616417 none 239616417 none 239616418 name1 239616418 none 239616428 name1 239616429 none 239616429 none 239616429 name1 我想删除A列的重复项,我想保留B列中任何类型名称的行(!=none,基本上),但如
A B
239616412 none
239616414 name2
239616417 none
239616417 none
239616417 none
239616418 name1
239616418 none
239616428 name1
239616429 none
239616429 none
239616429 name1
我想删除A列的重复项,我想保留B列中任何类型名称的行(!=none,基本上),但如果所有重复项中唯一的值是none,我仍然想保留它(如239616417
)
它应减少到:
A B
239616412 none
239616414 name2
239616417 none
239616418 name1
239616428 name1
239616429 name1
如果要删除任何重复项,这应该可以。排序将把所有有效条目放在NAs之后,因此它们将在
drop\u duplicate
逻辑中具有首选项
df.loc[df['B'] == 'none', 'B'] = np.nan
df = df.sort(['A','B']).drop_duplicates(subset='A')
如果希望保留重复的有效值,可以执行类似的操作,将数据拆分为null/notnull,然后重新组合
valids = df.dropna().drop_duplicates()
invalids = df[pd.isnull(df['B'])].drop_duplicates()
invalids = invalids[~invalids['A'].isin(valids['A'])]
df = pd.concat([valids, invalids])
这里有一个解决方案
首先对“B”列进行排序:
df.sort('B', inplace=True)
df
Out[24]:
A B
5 239616418 name1
7 239616428 name1
10 239616429 name1
1 239616414 name2
0 239616412 NaN
2 239616417 NaN
3 239616417 NaN
4 239616417 NaN
6 239616418 NaN
8 239616429 NaN
9 239616429 NaN
然后删除重复的w.r.t.列“A”:
df.drop_duplicates('A', inplace=True)
df
Out[26]:
A B
5 239616418 name1
7 239616428 name1
10 239616429 name1
1 239616414 name2
0 239616412 NaN
2 239616417 NaN
您可以对数据帧进行重新排序,以获得所需的内容:
df.sort(inplace=True)
df
Out[30]:
A B
0 239616412 NaN
1 239616414 name2
2 239616417 NaN
5 239616418 name1
7 239616428 name1
10 239616429 name1
如果
B
中有多个非无名称,您是否希望保留副本?我宁愿保留它们,但也可以删除它们,如果代码更容易这样做的话。上面提到的非无重复项只有5个左右,所以我可以管理它们。看起来第一个应该是df.sort\u值
,最后一个是df.sort\u索引
。