Разделение на рамки данных со строковыми значениями - PullRequest
2 голосов
/ 17 января 2020

У меня есть строковый фрейм данных, который я хотел бы изменить. Мне нужно обрезать каждую строку кадра данных значением, скажем, A4, и заменить другие значения после A4 на - или удалить их. Я хотел бы создать новый фрейм данных, который имеет значения только до строки "A4". Как бы я это сделал?

import pandas as pd
columns = ['c1','c2','c3','c4','c5','c6']
values = [['A1', 'A2','A3','A4','A5','A6'],['A1','A3','A2','A5','A4','A6'],['A1','A2','A4','A3','A6','A5'],['A2','A1','A3','A4','A5','A6'], ['A2','A1','A3','A4','A6','A5'],['A1','A2','A4','A3','A5','A6']]
input = pd.DataFrame(values, columns)

columns = ['c1','c2','c3','c4','c5','c6']
values = [['A1', 'A2','A3','A4','--','--'],['A1','A3,'A2','A5','A4','--'],['A1','A2','A4','--','--','--'],['A2','A1','A3','A4','--','--'], ['A2','A1','A3','A4','--','--'],['A1','A2','A4','--','--','--']]
output =  pd.DataFrame(values, columns)

Ответы [ 2 ]

1 голос
/ 18 января 2020

Вы можете создать небольшую функцию, которая будет принимать массив и изменять значения после желаемого значения:

def myfunc(x, val):
    for i in range(len(x)):
        if x[i] == val:
            break
    x[(i+1):] = '--'
    return x

Затем вам нужно apply функция к кадру данных в ряд ( axis = 1) Способ:

input.apply(lambda x: myfunc(x, 'A4'), axis = 1)


0   1   2   3   4   5
c1  A1  A2  A3  A4  --  --
c2  A1  A3  A2  A5  A4  --
c3  A1  A2  A4  --  --  --
c4  A2  A1  A3  A5  A4  --
c5  A2  A1  A4  --  --  --
c6  A1  A2  A4  --  --  --
0 голосов
/ 18 января 2020

Полагаю, у вас будут значения больше A4

df.replace('A([5-9])', '--', regex=True)

     0   1   2   3   4   5
c1  A1  A2  A3  A4  --  --
c2  A1  A3  A2  --  A4  --
c3  A1  A2  A4  A3  --  --
c4  A2  A1  A3  --  A4  --
c5  A2  A1  A4  A3  --  --
c6  A1  A2  A4  A3  --  --
...