假设我有以下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