Python - разделить на две колонки, если содержит '-', иначе вставить Nan - PullRequest
0 голосов
/ 06 мая 2020

У меня есть столбец в DataFrame с именем both_ntf, например:

column1
411.1
104.5-105.6
167.3-166.9
254
399
373.5

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

column1           column2        column3
411.1              411.1          NaN
104.5-105.6        104.5          105.6
167.3-166.9        167.3          166.9
254                254            NaN
399                399            NaN

Оператор if, который я сделал, кажется, не работает.

 if '-' in both_ntf['column1']:

    print("if")
    rng_ntf = both_ntf[both_ntf['column1'].str.contains("-", na=False)]
    rng_ntf[['column2','column3']] =rng_ntf.column1.str.split("-",expand=True)

    #Add
    filtered_ntf = rng_ntf


elif '-' not in both_ntf['column1']:

    print("elif")
    nrng_ntf = both_ntf[~both_ntf['column1'].str.contains("-", na=False)]
    nrng_ntf['column2'] = nrng_ntf['column1']

filtered_ntf = filtered_ntf.append(nrng_ntf, sort=True)

Как видите, rng_ntf и nrng_ntf - это временные фреймы данных, которые затем добавляются к новому фрейму данных filtered_ntf. Надеюсь сделать это эффективнее и быстрее.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Попробуйте:

pd.concat([df, df.column1.str.split('-', expand=True)], axis=1)

    column1       0       1
0   411.1         411.1   None
1   104.5-105.6   104.5   105.6
2   167.3sb-166.9 167.3sb 166.9
3   254           254     None
4   399           399     None
5   373.5         373.5   None

вы также можете назначить имена столбцов.


split_df = df.column1.str.split('-', expand=True)
split_df.columns=['column2', 'column3']
pd.concat([df, split_df], axis=1)
1 голос
/ 06 мая 2020

Это должно работать, но я не тестировал:

def split_values(x, col, i, sep='-'):
    items = x[col].split(sep)
    try:
        return items[i]
    except:
        return None

df['column2'] = df.apply(split_values, axis=1, args=("column1", 0))
df['column3'] = df.apply(split_values, axis=1, args=("column1", 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...