Создайте столбец в pandas кадре данных, разделив значения - PullRequest
1 голос
/ 07 августа 2020

У меня есть pandas фрейм данных, как показано ниже:

import pandas as pd
import numpy as np
df = pd.DataFrame({'col1':['AA_L8_ZZ', 'AA_L8_YY', 'AA_L80_XX', 'AA_L8_CC'], 'col2':['AAA_L8_1D', 'AA_L8_2D', 'AA_L80_5C', 'AA_L8_6Y']})
df

    col1        col2
0   AA_L8_ZZ    AAA_L8_1D
1   AA_L8_YY    AA_L8_2D
2   AA_L80_XX   AA_L80_5C
3   AA_L8_CC    AA_L8_6Y

Я хочу создать столбец как col3

col3 = (первые 2 экземпляра 'col1' после разделения на _ ) + _ + (3-й экземпляр col2 после разделения на _)

Мой ожидаемый результат:

    col1        col2        col3
0   AA_L8_ZZ    AAA_L8_1D   AA_L8_1D
1   AA_L8_YY    AA_L8_2D    AA_L8_2D
2   AA_L80_XX   AA_L80_5C   AA_L80_5C
3   AA_L8_CC    AA_L8_6Y    AA_L8_6Y

Ответы [ 3 ]

2 голосов
/ 07 августа 2020

Вы можете использовать такие методы доступа str:

df['col3'] = (df['col1'].str.rsplit('_', n=1).str[0]
                        .str.cat(df['col2'].str.rsplit('_', n=1).str[-1], 
                                 sep='_'))
df

Вывод:

        col1       col2       col3
0   AA_L8_ZZ  AAA_L8_1D   AA_L8_1D
1   AA_L8_YY   AA_L8_2D   AA_L8_2D
2  AA_L80_XX  AA_L80_5C  AA_L80_5C
3   AA_L8_CC   AA_L8_6Y   AA_L8_6Y

Где rsplit разделяет, начиная с конца (справа) и n параметр ограничить количество разделений. .str[n] - это индекс списка, созданного в результате разделения, а cat объединяет строки вместе с sep='_'.

2 голосов
/ 07 августа 2020

Давайте попробуем какое-нибудь регулярное выражение:

df['col3'] = df['col1'].str.extract('^(.*_.*_)').add(df['col2'].str.extract('^.*_.*_([^_]*)'))[0]

Вывод:

        col1       col2       col3
0   AA_L8_ZZ  AAA_L8_1D   AA_L8_1D
1   AA_L8_YY   AA_L8_2D   AA_L8_2D
2  AA_L80_XX  AA_L80_5C  AA_L80_5C
3   AA_L8_CC   AA_L8_6Y   AA_L8_6Y
1 голос
/ 07 августа 2020
import pandas as pd
import numpy as np
df = pd.DataFrame({'col1':['AA_L8_ZZ', 'AA_L8_YY', 'AA_L80_XX', 'AA_L8_CC'], 'col2':['AAA_L8_1D', 'AA_L8_2D', 'AA_L80_5C', 'AA_L8_6Y']})

#defining a list to store the contents for col3
a = []

#extracting the values by first changing the elements of both columns into string and then joining the extracted values and inserting into the list 
for i,j in zip(df.col1, df.col2):
    a.append(str(i).split('_')[0]+"_"+str(i).split('_')[1]+"_"+str(j).split('_')[2])

#defining new column and assigning the value to it
df['col3'] =  a

print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...