python - 从数据帧中查找字符串中子字符串的索引
问题描述
我有一个包含两列(和很多行)的数据框,一列是完整序列,另一列是完整的序列contains a sub sequence.
我想找到子序列在完整序列中开始的索引,并将其添加为另一列:
我试过这个:
df["start"] = df.sequence.index(df.sub_sequence)
但这会返回:TypeError: 'RangeIndex' object is not callable
我究竟做错了什么?
这是我希望得到的df和df:
示例数据框:
import pandas as pd
data = {"sequence": ["abcde","fghij","klmno"], "sub_sequence": ["cde", "gh", "no"]}
df = pd.DataFrame (data, columns = ['sequence','sub_sequence'])
sequence sub_sequence
0 abcde cde
1 fghij gh
2 klmno no
预期结果:
data2 = {"sequence": ["abcde","fghij","klmno"], "sub_sequence": ["cde", "gh", "no"], "start": [2,1,3]}
df2 = pd.DataFrame (data2, columns = ['sequence','sub_sequence','start'])
sequence sub_sequence start
0 abcde cde 2
1 fghij gh 1
2 klmno no 3
解决方案
df['start'] = [seq.index(sub) for seq, sub in zip(df['sequence'], df['sub_sequence'])]
或DataFrame.apply
沿axis=1
+使用str.index
:
df['start'] = df[['sequence', 'sub_sequence']].apply(lambda s: str.index(*s), axis=1)
结果:
sequence sub_sequence start
0 abcde cde 2
1 fghij gh 1
2 klmno no 3
推荐阅读
- android - 如何在出现在屏幕前的颤动中创建一个数字选择器微调器?
- html - 如何删除交易电子邮件正文中表格下方的边距?
- python - Pandas Groupby 几何平均值?
- android - 颤振运行命令未按预期工作
- c++ - 错误:无法转换 'std::ifstream {aka std::basic_ifstream
}' 到 'char**' 用于 getline() 函数 - python-3.x - 使用 DynamoDB 加密客户端(项目加密器)解密 DynamoDB 流?
- reactjs - 你如何在 React 事件监听器中处理外部数据?
- scala - 如何在Scala中反映与抽象类型的类型参数对应的具体类型?
- wordpress - 出现在 Woocommerce 中所有产品页面上的自定义按钮
- c# - iOS 14:Apple 拒绝“想查找并连接到本地网络上的设备”