如何在Pandas中按规则拼接PTM_loc与PTM_types列生成新列?
解决方案
可以通过apply函数结合字符串拆分与拼接来实现需求,具体代码如下:
import pandas as pd # 示例数据 data = pd.DataFrame({ 'PTM_loc': ['24', '24;30', '22', '19;20;66', '16;30;50'], 'PTM_typs': ['S', 'S', 'T', 'S;T', 'S;Y;T'] }) def combine_ptms(row): # 拆分位置和类型为列表 locs = row['PTM_loc'].split(';') types = row['PTM_typs'].split(';') # 处理类型数量少于位置的情况:重复最后一个类型补全 if len(types) < len(locs): types += [types[-1]] * (len(locs) - len(types)) # 对应拼接后用分号连接成最终字符串 return ';'.join([t + l for t, l in zip(types, locs)]) data['PTMs'] = data.apply(combine_ptms, axis=1)
运行后生成的data['PTMs']结果如下:
0 S24 1 S24;S30 2 T22 3 S19;T20;T66 4 S16;Y30;T50 Name: PTMs, dtype: object
代码说明
split(';'):将分号分隔的字符串拆分为列表,实现单个元素的对应匹配- 类型补全逻辑:当类型数量少于位置数量时(比如示例第1、3行),重复最后一个类型来匹配所有位置
zip(types, locs):按顺序将类型与位置一一配对,拼接成「类型+位置」的格式';'.join(...):将拼接后的单个元素重新用分号连接,还原为目标格式的字符串
内容的提问来源于stack exchange,提问作者RRRRRRRR
相关产品推荐
相关产品推荐

