Python 在中的另一列中创建具有值的新列
Hel,lo我有一个数据帧,例如:Python 在中的另一列中创建具有值的新列,python,pandas,Python,Pandas,Hel,lo我有一个数据帧,例如: Groups Names COLs COLe G1 ABC_DEF.1:2-300():Canis_lupus 2 300 G1 SDDD1 NA NA G1 SKUD.2. NA NA G1 SEQUENCE3
Groups Names COLs COLe
G1 ABC_DEF.1:2-300():Canis_lupus 2 300
G1 SDDD1 NA NA
G1 SKUD.2. NA NA
G1 SEQUENCE3 NA NA
G1 ABC_DEF.1:400-600():Canis_lupus 400 600
G1 IJK_LMN.1:20-200():Bos_taurus 20 200
G2 OP_D:500-1000():Felis_catus 500 1000
G2 JDJDJ99 NA NA
我想添加一个新的列Names2
,并将it内容中所有名称
不包含()
,与内容中包含()
的每个名称
进行分组:
产出将是:
Groups Names Names2 COLs COLe
G1 ABC_DEF.1:2-300():Canis_lupus SDDD1 2 300
G1 ABC_DEF.1:2-300():Canis_lupus SKUD.2. 2 300
G1 ABC_DEF.1:2-300():Canis_lupus SEQUENCE3 2 300
G1 ABC_DEF.1:400-600():Canis_lupus SDDD1 400 600
G1 ABC_DEF.1:400-600():Canis_lupus SKUD.2. 400 600
G1 ABC_DEF.1:400-600():Canis_lupus SEQUENCE3 400 600
G1 IJK_LMN.1:20-200():Bos_taurus SDDD1 20 200
G1 IJK_LMN.1:20-200():Bos_taurus SKUD.2. 20 200
G1 IJK_LMN.1:20-200():Bos_taurus SEQUENCE3 20 200
G2 OP_D:500-1000():Felis_catus JDJDJ99 500 1000
有人有使用熊猫的想法吗
df1 = df[df.Names.str.contains('()', regex=False)]
df2 = df[~df.Names.str.contains('()', regex=False)][['Groups', 'Names']]
print( pd.merge(left=df1, right=df2, on='Groups').rename(columns={"Names_x": "Names", "Names_y": "Names2"}) )
印刷品:
Groups Names COLs COLe Names2
0 G1 ABC_DEF.1:2-300():Canis_lupus 2.0 300.0 SDDD1
1 G1 ABC_DEF.1:2-300():Canis_lupus 2.0 300.0 SKUD.2.
2 G1 ABC_DEF.1:2-300():Canis_lupus 2.0 300.0 SEQUENCE3
3 G1 ABC_DEF.1:400-600():Canis_lupus 400.0 600.0 SDDD1
4 G1 ABC_DEF.1:400-600():Canis_lupus 400.0 600.0 SKUD.2.
5 G1 ABC_DEF.1:400-600():Canis_lupus 400.0 600.0 SEQUENCE3
6 G1 IJK_LMN.1:20-200():Bos_taurus 20.0 200.0 SDDD1
7 G1 IJK_LMN.1:20-200():Bos_taurus 20.0 200.0 SKUD.2.
8 G1 IJK_LMN.1:20-200():Bos_taurus 20.0 200.0 SEQUENCE3
9 G2 OP_D:500-1000():Felis_catus 500.0 1000.0 JDJDJ99
印刷品:
Groups Names COLs COLe Names2
0 G1 ABC_DEF.1:2-300():Canis_lupus 2.0 300.0 SDDD1
1 G1 ABC_DEF.1:2-300():Canis_lupus 2.0 300.0 SKUD.2.
2 G1 ABC_DEF.1:2-300():Canis_lupus 2.0 300.0 SEQUENCE3
3 G1 ABC_DEF.1:400-600():Canis_lupus 400.0 600.0 SDDD1
4 G1 ABC_DEF.1:400-600():Canis_lupus 400.0 600.0 SKUD.2.
5 G1 ABC_DEF.1:400-600():Canis_lupus 400.0 600.0 SEQUENCE3
6 G1 IJK_LMN.1:20-200():Bos_taurus 20.0 200.0 SDDD1
7 G1 IJK_LMN.1:20-200():Bos_taurus 20.0 200.0 SKUD.2.
8 G1 IJK_LMN.1:20-200():Bos_taurus 20.0 200.0 SEQUENCE3
9 G2 OP_D:500-1000():Felis_catus 500.0 1000.0 JDJDJ99
名称(例如jdj99)是否总是按行顺序跟随原始字符串名称?对不起,我不明白这个问题?你是说没有()的名字总是跟在带()的名字后面吗?是的答案是否你如何将名称与哪个名称联系起来?例如,SDDD1分配给“ABC_DEF.1:2-300():Canis_lube”的逻辑是什么?仅仅是因为它一直跟随它,直到出现新的名称ID?此外,这些是“NA”字符串还是Nan?放入名称2中的名称都是字符串中没有
()
的名称(例如:SDDD1),并分配给字符串中有()
的所有名称,以及组内所有可能的组合。这就是为什么ABC_DEF.1:2-300():Canis_lube,BC_DEF.1:400-600():Canis_lube和IJK_LMN.1:20-200():Bos_taurus
都没有()
(SDDD1、SKUD.2和SEQUENCE3
)就分配了这三个名字。和NA是'NA'名称(例如jdj99)是否总是按行顺序跟随原始字符串名称?抱歉,我不明白这个问题?你是说没有()的名字总是跟在带()的名字后面吗?是的答案是否你如何将名称与哪个名称联系起来?例如,SDDD1分配给“ABC_DEF.1:2-300():Canis_lube”的逻辑是什么?仅仅是因为它一直跟随它,直到出现新的名称ID?此外,这些是“NA”字符串还是Nan?放入名称2中的名称都是字符串中没有()
的名称(例如:SDDD1),并分配给字符串中有()
的所有名称,以及组内所有可能的组合。这就是为什么ABC_DEF.1:2-300():Canis_lube,BC_DEF.1:400-600():Canis_lube和IJK_LMN.1:20-200():Bos_taurus
都没有()
(SDDD1、SKUD.2和SEQUENCE3
)就分配了这三个名字。和NA是“NA”