按最后一个分隔符拆分列[重复]

问题描述 投票:0回答:2

我正在尝试按最后一个

' - '
拆分一列,并且所有字符串字母均为大写。下面,我有一个 df ,其中
Value
包含连接项目的各种组合。我想将列分成两个单独的列。简单来说,就是最后一个
' - '
之前的所有内容。我有
Last
正确,但不正确
First

df = pd.DataFrame({
    'Value': [
        'Juan-Diva - HOLLS',
        'Carlos - George - ESTE BAN',
        'Javier Plain - Hotham Ham - ALPINE',
        'Yul - KONJ KOL MON'
    ],
})

df[['First', 'l']] = df['Value'].str.split(' - ', n=1, expand=True)

df['Last'] = df['Value'].str.split('- ').str[-1]

预期输出:

                       First          Last
0                  Juan-Diva         HOLLS
1            Carlos - George      ESTE BAN
2  Javier Plain - Hotham Ham        ALPINE
3                        Yul  KONJ KOL MON
python pandas split
2个回答
1
投票
import pandas as pd
import re

df = pd.DataFrame({
    'Value': ['Juan-Diva - HOLLS', 'Carlos - George - ESTE BAN', 'Javier Plain - Hotham Ham - ALPINE', 'Yul - KONJ KOL MON'],
})

# Function to split the string
def split_value(s):
    # Find the last occurrence of ' - ' followed by uppercase letters
    match = re.search(r'(.*) - ([A-Z\s]+)$', s)
    if match:
        return match.group(1), match.group(2)
    else:
        return s, None

# Apply the function to each row in 'Value' column
df[['First', 'Last']] = df['Value'].apply(lambda x: split_value(x)).tolist()

print(df)

输出:

                                Value                      First          Last
0                   Juan-Diva - HOLLS                  Juan-Diva         HOLLS
1          Carlos - George - ESTE BAN            Carlos - George      ESTE BAN
2  Javier Plain - Hotham Ham - ALPINE  Javier Plain - Hotham Ham        ALPINE
3                  Yul - KONJ KOL MON                        Yul  KONJ KOL MON

0
投票

IIUC,你应该使用

.str.rsplit

df[["First", "Last"]] = df["Value"].str.rsplit(" - ", n=1, expand=True)
print(df)

打印:

                                Value                      First          Last
0                   Juan-Diva - HOLLS                  Juan-Diva         HOLLS
1          Carlos - George - ESTE BAN            Carlos - George      ESTE BAN
2  Javier Plain - Hotham Ham - ALPINE  Javier Plain - Hotham Ham        ALPINE
3                  Yul - KONJ KOL MON                        Yul  KONJ KOL MON
© www.soinside.com 2019 - 2024. All rights reserved.