熊猫通过向量参数应用函数

时间:2020-03-13 16:17:51

标签: python pandas

样本DF:

df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
                   'num_wings': [2, 0, 0, 0],
                   'num_specimen_seen': [10, 2, 1, 8]},
                  index=['falcon', 'dog', 'spider', 'fish'])

我有一个向量(pd.Series),其长度等于df中的列数:

x_add = pd.Series([1,2,3])

我想在df的每一列中添加逐元素的x_add(将1添加到第一列,将2添加到第二列,等等)。像tihs(这些代码不起作用)之类的东西:

def my_sum(series, x):
    y = x + 3 * 5
    z = x - 5 + 8
    series = series + 1 + z + x
    return series
x_vector = [1, 2 ,3]
df.apply(lambda x: my_sum(x, x_vector), axis=1)

如果您可以同时编写一个解决方案以并行执行apply,那就太好了。

希望上次编辑

我想使用的真实功能:

import pandas as pd
from mlfinlab.features.fracdiff import frac_diff_ffd

df = pd.DataFrame({'col1': [2, 4, 8, 0, 8, 9, 7, 7, 5000, 60000],
                   'col2': [2, 0, 0, 0, 200, 4400, 544560, 2564, 543, 454]})


argument_vector = [1, 2]
df.apply(lambda x: frac_diff_ffd(x, argument_vector))

2 个答案:

答案 0 :(得分:3)

简单

>>> df + x_add.values

        num_legs  num_wings  num_specimen_seen
falcon         3          4                 13
dog            5          2                  5
spider         9          2                  4
fish           1          2                 11

对于apply

>>> df.apply(lambda x: x + x_add.values, axis=1)

        num_legs  num_wings  num_specimen_seen
falcon         3          4                 13
dog            5          2                  5
spider         9          2                  4
fish           1          2                 11

根据修改:

def my_sum(series, x):
    return series + x

my_sum(df.iloc[0], 2)

x_vector = [1, 2 ,3]
df.apply(lambda x: my_sum(x, x_vector), axis=1)

顺便说一句,已经有可以为您执行此操作的功能

from operator import add
df.apply(lambda x: add(x, x_vector), axis=1)

答案 1 :(得分:2)

使用DataFrame.add

df.add(pd.Series([1,2,3]).values)

apply

df.apply(lambda row: row.add(x_add.values), axis=1)

        num_legs  num_wings  num_specimen_seen
falcon         3          4                 13
dog            5          2                  5
spider         9          2                  4
fish           1          2                 11
只要.values 索引不是数据帧的x_add

就必须使用columns

编辑

x_vector = [1, 2 ,3]
df.apply(lambda row: my_sum(row, x_vector), axis=1)
相关问题