pandas - Pandas - 减去单独列中位置编号的列
问题描述
数据集
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)
推荐阅读
- node.js - 填充字段的相等搜索
- json - 如何从 NY Times API 访问特定日期的每篇文章?
- firebase - 使用 Vue 资源删除键
- android - 如何将图像压缩为小?
- java - 如何在菜单中添加外部链接
- javascript - 如何循环遍历推入数组的对象实例?
- view - Django-registration:防止登录(经过身份验证)访问注册页面结果到注册页面拒绝所有用户
- python - 为什么我需要在正则表达式中使用 [ 和 ] 而不是 ( and ) ?
- python - 从多核分布式处理到多核节点分布式处理
- android - 底部导航不起作用并导致应用程序崩溃