我正在尝试将左侧的Pandas数据帧重新整形为右侧的数据帧。
将类型复制到上面很容易
df['type'] = np.where(df.customer.str.match('DRIVER'), 'DRIVER', '')
但我需要一些方法来捕获ID之间的整个间隔。这是艰难的一部分。非常感谢任何帮助或建议。
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)
答案 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