我喜欢使用np.r_和{}
我知道这看起来一团糟,但情人眼里出西施。在def parse(o):
mm = lambda i: slice(min(i), max(i) + 1)
return np.r_.__getitem__(tuple(
mm(list(map(int, s.strip().split('-')))) for s in o.split(',')
))
r = df.Options.apply(parse)
new = np.concatenate(r.values)
lens = r.str.len()
df.loc[df.index.repeat(lens)].assign(Options=new)
Name Options Email
0 Bob 1 bob@email.com
0 Bob 2 bob@email.com
0 Bob 4 bob@email.com
0 Bob 5 bob@email.com
0 Bob 6 bob@email.com
2 Mary 1 mary@email.com
2 Mary 2 mary@email.com
3 Jane 1 jane@email.com
3 Jane 3 jane@email.com
3 Jane 4 jane@email.com
3 Jane 5 jane@email.com
说明np.r_接受不同的切片器和索引器并返回组合的数组。在
^{pr2}$
或者np.r_[slice(1, 2), slice(4, 7