dataFrame自定义排序(里面有map的用法)

https://vimsky.com/examples/usage/python-pandas.Series.map.html

 

https://blog.csdn.net/weixin_38664232/article/details/89048065

 

https://www.cnblogs.com/panchuangai/p/13907232.html

方法一:自定义排序新增一列然后用map来匹配

代码:

df = pd.DataFrame({
'cloth_id': [1001, 1002, 1003, 1004, 1005, 1006],
'size': ['S', 'XL', 'M', 'XS', 'L', 'S'],
})

dfrange = pd.DataFrame({'size': ['XS', 'S', 'M', 'L', 'XL']})

dfrange = dfrange.reset_index().set_index('size')
df['sort'] = df['size'].map(dfrange['index'])

df.sort_values(by=['sort'],inplace=True)

方法二:通过pandas.api.type包里的Categorical

from pandas.api.types import CategoricalDtype
df = pd.DataFrame({
'cloth_id': [1001, 1002, 1003, 1004, 1005, 1006],
'size': ['S', 'XL', 'M', 'XS', 'L', 'S'],
})
dtype = CategoricalDtype(['XS', 'S', 'M', 'L', 'XL'], ordered=True)
df['size'] = df['size'].astype(dtype)
df.sort_values(by=['size'], inplace=True)


方法一的用法:

Series.map(self, arg, na_action=None)

根据输入对应关系映射Series的值。

用于将Series中的每个值替换为另一个值,该值可以从函数adict或一个Series

参数:

arg:function, collections.abc.Mapping subclass 或 Series

映射对应关系。

na_action:{None, ‘ignore’}, 默认为 None

如果为‘ignore’,则传播NaN值,而不将其传递给映射对应关系。

返回值:

Series

与调用者相同的索引。

 

注意:

 

arg是字典,Series中不在字典中的值(作为键)将转换为NaN。但是,如果字典是dict定义的子类__missing__(即提供默认值的方法),则使用此默认值而不是NaN

 

例子:

 

>>> s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
>>> s
0      cat
1      dog
2      NaN
3   rabbit
dtype:object

map接受一个dict或一个Series。在中找不到的值dict转换为NaN,除非该字典具有默认值(例如defaultdict):

>>> s.map({'cat': 'kitten', 'dog': 'puppy'})
0   kitten
1    puppy
2      NaN
3      NaN
dtype:object

它还接受一个功能:

>>> s.map('I am a {}'.format)
0       I am a cat
1       I am a dog
2       I am a nan
3    I am a rabbit
dtype:object

为了避免将函数应用于缺失值(并将其保留为NaN)na_action='ignore'可以使用:

>>> s.map('I am a {}'.format, na_action='ignore')
0     I am a cat
1     I am a dog
2            NaN
3  I am a rabbit
dtype:object
posted @ 2021-12-29 17:37  ivyJ  阅读(466)  评论(0)    收藏  举报