Итерация по всему Pandas Dataframe с использованием столбца и строки в качестве аргументов - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть этот пустой фрейм данных pandas и значение функции (x, y), которое принимает 2 аргумента, номер строки и номер столбца точки в фрейме данных pandas.Мне было интересно, есть ли более простой способ итерации по всему пустому фрейму данных с использованием этих аргументов, возможно с использованием df.apply.

Я знаю, что можно пройти через каждый отдельный столбец и запустить df.apply наотдельные столбцы, но возможно ли это сделать без выполнения каких-либо циклов или чего-либо подобного.

По сути, я ищу что-то подобное, что я могу запустить на всем фрейме данных

df_copy.apply(lambda x: myfunction(x.value, x.column))

Однако x.column не существует, поэтому существует другой способ сделать это или я делаю что-то не так

Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Да, используйте name и index атрибуты серии:

df = pd.DataFrame(1, index = np.arange(10,51,10), columns = np.arange(5))

Показать входной фрейм данных

    0  1  2  3  4
10  1  1  1  1  1
20  1  1  1  1  1
30  1  1  1  1  1
40  1  1  1  1  1
50  1  1  1  1  1

Давайте определим пользовательскую функцию и будем использовать строки в качестве столбцов для выполнениярасчет.

def f(x):
    #add row values to column values
    return x.name + x.index

df.apply(f)

Вывод:

     0   1   2   3   4
10  10  11  12  13  14
20  20  21  22  23  24
30  30  31  32  33  34
40  40  41  42  43  44
50  50  51  52  53  54

Примечание: apply передает каждый столбец кадра данных (который является pd.Series) в функцию f.Каждая серия имеет атрибут name, который является заголовком столбца, и index, который является индексом строки данных.Итак, функция, f возвращает вычисленный pd.Series для каждого столбца информационного кадра и объединяется обратно в виде информационного кадра.

Отвечая на вопрос в комментариях, давайте использовать строки:

df = pd.DataFrame(1, index=['Ted','Bill','Ralph','John','Tim'], columns=['A','B','C','D','E'])

def f(x):
    #Concatenate row values with column values
    return x.index + '_' + x.name

df.apply(f)

ИЛИ используйте лямбда-функцию

df.apply(lambda x: x.index + '_' + x.name)

Выход:

             A        B        C        D        E
Ted      Ted_A    Ted_B    Ted_C    Ted_D    Ted_E
Bill    Bill_A   Bill_B   Bill_C   Bill_D   Bill_E
Ralph  Ralph_A  Ralph_B  Ralph_C  Ralph_D  Ralph_E
John    John_A   John_B   John_C   John_D   John_E
Tim      Tim_A    Tim_B    Tim_C    Tim_D    Tim_E
...