我有一个Pandas Series
,其中标签当前为None
或包含字母和数字的字符串。
我需要重新标记非None元素,以保持相同的分组和排序,但用每个组的最小连续数替换数字,从1开始(参见下面的示例)。我还需要进行简单的文本替换来替换字母(总是“G”和“Group _”)。
我想我可以编写一些非常低效且冗长的代码来做这件事,但我觉得我的解决方案至少要比任何体面的方法长100行。所以我想知道这样做的好方法。
示例:
import pandas as pd
mydat = pd.Series([None, 'G130', 'G151', 'G142', 'G151', 'G130', None])
结果数据系列:
>>> mydat 0 None 1 G130 2 G151 3 G142 4 G151 5 G130 6 None dtype: object
期望的结果:
>>> mydat
0 None
1 Group_1
2 Group_3
3 Group_2
4 Group_3
5 Group_1
6 None
dtype: object
答案 0 :(得分:2)
('Group_'+mydat.astype('category').cat.codes.add(1).astype(str)).mask(mydat.isnull())
Out[1168]:
0 NaN
1 Group_1
2 Group_3
3 Group_2
4 Group_3
5 Group_1
6 NaN
dtype: object
答案 1 :(得分:1)
s = mydat.str[1:].dropna().astype(int)
g = 'Group_{}'.format
f = s.factorize(sort=True)[0] + 1
pd.Series([g(x) for x in f], s.index).combine_first(mydat)
0 None
1 Group_1
2 Group_3
3 Group_2
4 Group_3
5 Group_1
6 None
dtype: object