>>> 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
import pandas as pd
df = pd.DataFrame([(1,'Ms'), (1, 'PhD'), (2, 'Ms'), (2, 'Bs'), (3, 'PhD'), (3, 'Bs'), (4, 'Ms'), (4, 'PhD'), (4, 'Bs')], columns=['A', 'B'])
df['B']=df['B'].astype('category')
# after setting the column's type to 'category', you can set the order
df['B']=df['B'].cat.set_categories(['PhD', 'Bs', 'Ms'], ordered=True)
df.sort(['A', 'B'], inplace=True)
df_unique = df.drop_duplicates('A')
使用自定义函数对数据帧排序:
我们的分类功能:
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)
假设给定一个值时B值的唯一性,并且每个A值在B列中都有一行Bs:
将为您提供一个包含所需PhD行的数据帧。
然后从df中删除所有博士和硕士:
然后连接df和df2:
然后你就可以像你想要的那样使用drop_副本:
考虑使用
Categoricals
。它们很好地将文本按非字母顺序(除其他外)分组/排序相关问题 更多 >
编程相关推荐