假设我有以下DataFrame:

 A | B
 1 | Ms
 1 | PhD
 2 | Ms
 2 | Bs

我想删除与A列有关的重复行,并且我想保留B列中值为“PhD”的行作为原始行,如果找不到“PhD”,我想保留该行。 B列中的“Bs”。

我正在尝试使用
 df.drop_duplicates('A')

有条件

最佳答案

>>> df
    A   B
0   1   Ms
1   1   Ms
2   1   Ms
3   1   Ms
4   1   PhD
5   2   Ms
6   2   Ms
7   2   Bs
8   2   PhD

使用自定义函数对数据框进行排序:
def sort_df(df, column_idx, key):
    '''Takes a dataframe, a column index and a custom function for sorting,
    returns a dataframe sorted by that column using that function'''

    col = df.ix[:,column_idx]
    df = df.ix[[i[1] for i in sorted(zip(col,range(len(col))), key=key)]]
    return df

我们的排序功能:
cmp = lambda x:2 if 'PhD' in x else 1 if 'Bs' in x else 0
实际上:
sort_df(df,'B',cmp).drop_duplicates('A', take_last=True)
    A   B
4   1   PhD
8   2   PhD

关于python - 从Pandas DataFrame删除重复项,并保留原始条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33042777/

10-11 22:09
查看更多