используя сложные условия для формирования кадра данных панд из существующего

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

FULL_NAME ARGUMENT DEF_VALS TYPE 'function1' 'f1_arg1' NAN 'NoneType' 'function1' 'f1_arg2' NAN NAN 'function1' 'f1_arg3' NAN NAN 'function2' 'f2_arg1' 0 'int' 'function3' 'f3_arg1' True 'bool' 'function3' 'f3_arg2' 'something' 'str' 

Этот информационный кадр можно воспроизвести следующим образом:

 import pandas as pd D = {'FULL_NAME': ['function1', 'function1', 'function1', 'function2', 'function3', 'function3'], 'ARGUMENT': ['f1_arg1', 'f1_arg2', 'f1_arg3', 'f2_arg1', 'f3_arg1', 'f3_arg2'], 'DEF_VAL': [float('nan'), float('nan'), float('nan'), 0, True, 'something'], 'TYPE': ['NoneType', float('nan'), float('nan'), 'int', 'bool', 'str']} dataframe = pd.DataFrame(D) 

То, что я пытаюсь получить в результате, должно выглядеть так:

 args function [a1=NONE, a2=, a3=] function1(f1_arg1=a1, f1_arg2=a2, f1_arg3=a3) [a1=0] function2(f2_arg1=a1) [a1=True, a2=something] function3(f3_arg1=a1, f3_arg2=a2) 

Все значения в столбцах «FULL_NAME» и «ARGUMENT» являются строками.

Что касается {i}, a {i} должен быть равен значению аргумента по умолчанию, если значением по умолчанию является NAN а его тип – NAN (в этом случае ему должен следовать знак '='). Если значением по умолчанию для аргумента является NAN но тип NoneType то {i} должен быть None .

Это может быть достигнуто следующим образом (решение было предложено здесь ):

 df['args'] = 'a'+(df.groupby('FULL_NAME').cumcount()+1).astype(str) df['ARGUMENT'] = df['ARGUMENT']+ '=' + df['args'] df['args'] += '=' df['args'] = df.apply(lambda x: x['args']+'NONE' if x['TYPE'] == 'NoneType' else x['args'] if pd.isnull(x['TYPE']) else x['args']+str(x['DEF_VAL']),1 ) ndf = pd.concat([pd.DataFrame(df.groupby('FULL_NAME')['ARGUMENT'].apply(tuple)), pd.DataFrame(df.groupby('FULL_NAME')['args'].apply(list))],1) ndf['function'] = (ndf.reset_index()['FULL_NAME'] + ndf.reset_index()['ARGUMENT'].apply(str)).tolist() ndf = ndf.reset_index(drop=True).drop('ARGUMENT',1) ndf['function'].replace(["'",",\)"],["",")"],regex=True,inplace=True) 

Однако я хотел бы наложить одно важное условие. А именно, некоторые из этих функций на самом деле являются классными методами, и исходный dataframe может выглядеть следующим образом:

 FULL_NAME ARGUMENT DEF_VAL TYPE 'function1' 'self' NAN NAN 'function1' 'f1_arg2' 0 'int' 'function1' 'f1_arg3' NAN TypeNone 'function2' 'f2_arg1' 0 'int' 'function3' 'f3_arg1' True 'bool' 'function3' 'f3_arg2' 'something' 'str' 

В этом случае я бы хотел, чтобы «я» игнорировалось, и результирующий фрейм выглядел следующим образом:

 args function [a1=0, a2=None] function1(f1_arg2=a1, f1_arg3=a2) [a1=0] function2(f2_arg1=a1) [a1=True, a2=something] function3(f3_arg1=a1, f3_arg2=a2) 

Собственный аргумент игнорируется. Как достичь этого, используя панды?

One Solution collect form web for “используя сложные условия для формирования кадра данных панд из существующего”

Вы можете сделать df = df[df['ARGUMENT'] != 'self'].copy(deep=True) чтобы удалить все строки с ARGUMENT, равными «self», прежде чем применять решение.

PS Я также предполагаю, что вам нужно только снять «я», если это первый аргумент, в этом случае соответствующий шаг предварительной обработки будет

 df = df[ ~( (df['ARGUMENT'] == 'self') & (df.groupby('FULL_NAME').cumcount() == 0) ) ].copy(deep=True) 
  • pandas isin () возвращает другой результат как eq () - проблема с переменной dtype-float
  • Вычислить средневзвешенное значение с помощью панды / данных
  • Как наложить морскую суставную манжету с «маргинальной» (гистограммой распределения) из другого набора данных
  • Время от времени Pandas между событиями
  • Pandas - условная вероятность данного конкретного b
  • Python Pandas groupby, rank, затем присвойте значение на основе пользовательского ранга
  • Замените строки в Pandas df строками из другого df
  • Создайте кадр данных Pandas со счетчиками элементов, охватывающих диапазон дат
  • Python - лучший язык программирования в мире.