2015-09-21 5 views
0

Я пытаюсь переделать рамку данных Pandas слева вправо справа.Условное заполнение значений в фрейме данных Pandas

Это достаточно просто скопировать тип над
df['type'] = np.where(df.customer.str.match('DRIVER'), 'DRIVER', '')
, но мне нужно каким-то образом, чтобы захватить весь интервал между идентификаторами. Это непростая часть. Любая помощь или совет в целом были бы весьма признательны.

enter image description here

df = { 'customer': ['ID 100', 'DRIVER', 'big wheel', 'unicycle', 'porshe', 'ID 200', 'EATER', 'bigmac', 'celery', 'gum', 'ID 300', 'MISSING', 'ID 400', 'READER', 'Gorden Korman', 'Hiroyuki Nishigaki'], 
     'type': ['', '', '' , '', '', '', '', '', '', '', '', '', '', '', '', '']} 
df = pd.DataFrame(df) 

ответ

1

Мое решение основано на ID 100, ID 200, водитель, Eater, отсутствует и т.п. быть в верхнем регистре.

Затем используйте функцию карты, за которой следует fillna (method = 'ffill') и, наконец, верните «ID XXX» в пустую строку.

df['type'] = df['customer'].map(lambda x: x if x.isupper() else None) 
df['type'] = df['type'].fillna(method ="ffill") 
df['type'] = df['type'].map(lambda x: '' if x[0:3] =='ID ' else x) 

print df.head(len(df)) 



       customer  type 
0    ID 100   
1    DRIVER DRIVER 
2   big wheel DRIVER 
3    unicycle DRIVER 
4    porshe DRIVER 
5    ID 200   
6    EATER EATER 
7    bigmac EATER 
8    celery EATER 
9     gum EATER 
10    ID 300   
11    MISSING MISSING 
12    ID 400   
13    READER READER 
14  Gorden Korman READER 
15 Hiroyuki Nishigaki READER 
Смежные вопросы