Pandas在数据框的多列上应用函数

6
当我运行以下代码时,出现了KeyError: ('a', 'occurred at index a')的错误。如何在不遇到此问题的情况下在数据框(Dataframe)上应用此函数或类似的函数?
运行的python版本为python3.6,使用的pandas版本为v0.22.0。
import numpy as np
import pandas as pd

def add(a, b):
    return a + b

df = pd.DataFrame(np.random.randn(3, 3), 
                  columns = ['a', 'b', 'c'])

df.apply(lambda x: add(x['a'], x['c']))
3个回答

5
我认为在使用apply函数进行行处理时,需要使用axis=1参数:

axis:{0 或 'index',1 或 'columns'},默认为 0

0index:对每列应用函数
1columns:对每行应用函数

df = df.apply(lambda x: add(x['a'], x['c']), axis=1)
print (df)
0   -0.802652
1    0.145142
2   -1.160743
dtype: float64

1
'axis=1' 中的 1 表示“列”,相反地,'axis=0' 表示“行”。因此,在 apply 函数中设置 'axis=1' 告诉函数沿着列移动,或者换句话说,迭代行。https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html - kevins_1

0

您甚至不需要应用,可以直接添加列。输出将是一个系列,无论如何:

df = df['a'] + df['c']

例如:

df = pd.DataFrame({'a': [1, 2], 'b': [3, 4], 'c': [5, 6]})
df = df['a'] + df['c']
print(df)
#  0    6
#  1    8
#  dtype: int64

我心中想的是一个更复杂的函数,不仅仅是加法,而是一些无法用这种方式向量化的东西。 - labjunky
@labjunky,能否与我们分享一下这个复杂函数?它本身可能就是一个有趣的问题。 - jpp

0

你可以尝试这个

import numpy as np
import pandas as pd

def add(df):
   return df.a + df.b

df = pd.DataFrame(np.random.randn(3, 3), 
                      columns = ['a', 'b', 'c'])

df.apply(add, axis =1)

当然,您可以替换任何以df的列作为输入的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接