熊猫-将列替换为单独列中的位置编号

AK91

数据集

df = pd.DataFrame({'a': [0,3,4], 'b': ['0101010', '0100010', '0111100']})

基本上尝试创建一个列,该列采用列的长度1的子字符串,该子串从列b中的位置编号开始a

尝试

position = df['a']
df['c'] = df['b'].str[position]

期望的输出

a    b        c
0    0101010  0
3    0100010  0
4    0111100  1
耶斯列尔

使用list comprehensionzip

df['c'] = [b[a] for a, b in zip(df.a, df.b)]

apply

df['c'] = df.apply(lambda x: x['b'][x['a']], axis=1)

print (df)
   a        b  c
0  0  0101010  0
1  3  0100010  0
2  4  0111100  1

性能有所不同:

#[3000 rows x 2 columns]
df = pd.concat([df] * 1000, ignore_index=True)

In [236]: %timeit df['c'] = [b[a] for a, b in zip(df.a, df.b)]
557 µs ± 25.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [237]: %timeit df['c'] = df.apply(lambda x: x['b'][x['a']], axis=1)
57.3 ms ± 358 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章