数据集
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 comprehension
有zip
:
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] 删除。
我来说两句