pandas使用条件删除一列的重复项

use*_*659 3 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
Run Code Online (Sandbox Code Playgroud)

我想删除列A的重复项,我想在列B中保留其中包含任何类型名称的行(!= none,基本上),但如果所有重复项中的唯一值都为none,则还是想保留它(比如239616417).

它应该减少到:

A   B
239616412   none
239616414   name2
239616417   none
239616418   name1
239616428   name1
239616429   name1
Run Code Online (Sandbox Code Playgroud)

deh*_*ker 8

这是一个解决方案.

首先对列'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
Run Code Online (Sandbox Code Playgroud)

然后删除'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
Run Code Online (Sandbox Code Playgroud)

您可以重新排序数据框以获得您想要的内容:

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
Run Code Online (Sandbox Code Playgroud)