Используйте переменное число условий для выбора строк, значение столбца которых равно некоторому значению - PullRequest
0 голосов
/ 07 мая 2019

Я хочу получить подмножество фрейма данных, основанное на нескольких условиях, с числом условий, которые я передаю переменной.

Я видел похожие ответы с несколькими условиями ( Выбор строк в кадре данных на основе значений в столбце в пандах ) , но ни один, который позволяет передавать меньше переменных.

Я пытался использовать: c = Нет, c = True, c = all, но всегда оценивается как false

def Subset (df, a=None, b=None, c=True): 
    temp=df.loc[(df['a'] == a) & (df['b'] == b) & (df['c'] == c)]

    return (temp)

если я оцениваю:

Subset=Subset(df=Table, a=350, b=300)

Я получаю пустой фрейм данных

пока я использую функцию:

def Try(df, a=None, b=None): 
    temp=df.loc[(df['a'] == a) & (df['b'] == b)]

    return (temp)

Я получаю фрейм данных с 10 строками.

Чтобы ответить на комментарий Яакова Бресслера, я даю больше информации: Мой фрейм данных выглядит так:

files,Names,Curve Type,Thickness,Temperature,Number,Iteration,leak,start,stop,Vth,F_E_M,on/off
Output [(1) _250-300-G21_]0.csv,250-300-G21,Output,250,300,G21,0,True,,,,,
Output [(1) _250-300-G22_]0.csv,250-300-G22,Output,250,300,G22,0,False,,,,,
Transfer lin [(1) _250-300-G21_;]0.csv,250-300-G21,Transfer lin,250,300,G21,0,True,,,,,

первый столбец - это имена файлов. другие столбцы - данные о транзиторе, который представляет файл.

Я хочу создать подмножество этого файла, представляющее один транзистор, определяемый как: (тип кривой, толщина, температура, число) или одного чипа: (тип кривой, толщина, температура).

Это так, чтобы я мог импортировать их и делать графики / анализ.

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

В итоге я сделал это так:

    def Subset ( df, *arg, **kwargs):  
        ''' joins them in a query,
            TRANFROMS DATASET TO STR , and gives back subsett'''

        qry = ' & '.join(["{} == '{}'".format(key,value) for key,value in kwargs.items()])        
        df=df.astype(str)


        subset=df.query(qry)
        return (subset)

0 голосов
/ 07 мая 2019

Похоже, что столбец 'c' вашего фрейма данных не является логическим.Попробуйте print(df['c'].dtype == 'bool')

Кроме того, , поделившись своим оригинальным df, и цель поможет разобраться в вашей проблеме.

Кроме того, также , я бы не сталимя объекта после функции, как в случае Subset=Subset(df=Table, a=350, b=300)

...