pandas dataframe在多列上快速应用功能

时间:2018-08-13 07:51:31

标签: python pandas function dataframe apply

我有一个包含多列的数据框df(不确定多少列)。列之一称为x。我定义了一个函数my_function,该函数将2列作为输入并对其进行处理并返回一个新列。 我想在数据框的所有列上执行my_function(df[x], df[y])(其中y是除x以外的所有所有列),并返回具有完全相同的列名但更新值的新df来自my_function

new_df = my_function(df[x], df[y]) 

其中y = df中除x之外的所有列。最快的方法是什么?

3 个答案:

答案 0 :(得分:1)

如果您的函数执行按行预处理,则可以对每一列使用apply方法(请参见doc):

columns = [item for item in df.columns.values if item!=x]
for c in coulmns:
   df[c] = df.apply(lambda row: my_function(row[c], row[x]) ,axis=1)

如果没有,可以分享“ my_function”的身体吗?

最佳,

答案 1 :(得分:0)

您可以尝试以下操作:

x = 'col_name'
[my_function(df[x], df[col]) for col in df if col!=x]

示例:

df = pd.DataFrame( {'a':[1,2],'b':[4,3],'c':[5,9], 'd':[2,9]})
x = 'a'
df1 = pd.DataFrame({})
def my_function(a,b, name):
    c = a+b
    df1[name] = c

[my_function(df[x], df[col], name) for name, col in enumerate(df) if col!=x]
print df1

输出:

   1   2   3
0  5   6   3
1  5  11  11

答案 2 :(得分:0)

使用更快的大熊猫应用功能的一种快速有效的解决方案是使用swifter,这是一个示例:

import pandas as pd
import swifter

def fnc(m,x,c):
    return m*x+c

df = pd.DataFrame({"m": [1,2,3,4,5,6], "c": [1,1,1,1,1,1], "x":[5,3,6,2,6,1]})
df["y"] = df.swifter.apply(lambda x: fnc(x.m, x.x, x.c), axis=1)