Как применить функцию ко всем столбцам в фрейме данных и получить вывод в виде фрейма данных в python - PullRequest
1 голос
/ 19 апреля 2019

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

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

A   B   C   D   E   F
1456    6744    9876    374 65413   1456
654 2314    674654  2156    872 6744
875 653 36541   345 4963    9876
6875    7401    3654    465 3547    374
78654   8662    35  6987    6874    65413
658 94512   687 489 8756    5854

Результаты

A   B   C   D   E   F
2110    9058    684530  2530    66285   8200
1529    2967    711195  2501    5835    16620
7750    8054    40195   810 8510    10250
85529   16063   3689    7452    10421   65787

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

Вот простой пример

df

    A   B   C   D
0  10  11  12  13
1  20  21  22  23
2  30  31  32  33
3  40  41  42  43

# Assume your user defined function is 
def mul(x, y):
  return x * y

, который будет умножать значения

Допустим, вы хотите умножить первый столбец 'A' ​​на 3

df['A'].apply(lambda x: mul(x,3))

0     30
1     60
2     90
3    120

Теперь, вы хотите применить функцию mul ко всем столбцам данных и создать новый файл данных с результатами

df1 = df.applymap(lambda x: mul(x, 3))

df1

     A    B    C    D
0   30   33   36   39
1   60   63   66   69
2   90   93   96   99
3  120  123  126  129
0 голосов
/ 19 апреля 2019

Похоже, это то, что вы пытаетесь сделать в своем выводе:

df = pd.DataFrame(
    [[1456, 6744, 9876, 374, 65413, 1456],
     [654, 2314, 674654, 2156, 872, 6744],
     [875, 653, 36541, 345, 4963, 9876],
     [6875, 7401, 3654, 465, 3547, 374],
     [78654, 8662, 35, 6987, 6874, 65413],
     [658, 94512, 687, 489, 8756, 5854]],
    columns=list('ABCDEF'))

def fn(col):
    return col[:-2].values + col[1:-1].values

Примените функцию, указанную в предыдущих ответах:

>>> df.apply(fn)
        A   B   C   D   E   F
0   2110    9058    684530  2530    66285   8200
1   1529    2967    711195  2501    5835    16620
2   7750    8054    40195   810 8510    10250
3   85529   16063   3689    7452    10421   65787
0 голосов
/ 19 апреля 2019

pd.DataFrame объект также имеет свой собственный apply метод .

Из примера, приведенного в документации по ссылке выше:

>>> df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
>>> df
   A  B
0  4  9
1  4  9
2  4  9
>>> df.apply(np.sqrt)
     A    B
0  2.0  3.0
1  2.0  3.0
2  2.0  3.0

Заключение : вы должны иметь возможность применить свою функцию ко всему фрейму данных.

...