有条理地填写Pandas数据帧中的值

时间:2015-09-21 22:49:24

标签: python pandas

我正在尝试将左侧的Pandas数据帧重新整形为右侧的数据帧。

将类型复制到上面很容易 df['type'] = np.where(df.customer.str.match('DRIVER'), 'DRIVER', '')
但我需要一些方法来捕获ID之间的整个间隔。这是艰难的一部分。非常感谢任何帮助或建议。

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 个答案:

答案 0 :(得分:1)

我的解决方案基于ID 100,ID 200,DRIVER,EATER,MISSING等为大写。

然后使用map函数,后跟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