如何在应用的函数中引用要应用函数的数据帧

时间:2016-04-07 15:51:51

标签: python pandas apply

如何在所应用的函数中引用要应用函数的数据帧。

例如,我有一个名为name_df的数据框。它有4列(没有指定的索引)。

我有一个名为calculate_stats的函数,它接受几个参数(整数值和df的混合)。

在calculate_stats中我想引用name_df['name1']name_df['name2']

我做了:

name_df.apply(calculate_stats, axis=1, args=(r, df,x,y,z))

在calculate_stats中,我使用r['name1']r['name2']

但是出现了错误,表明NameError: name 'r' is not defined

在以下link中,他们将函数func1应用于dataframe df。引用df中每一行的参数指定为r。因此在func1中,可以使用r [' colname']来引用df列。我如何对我的功能做同样的事情?

In [37]: df
Out[37]:
   X  Y  Count
0  0  1      2
1  0  1      2
2  1  1      2
3  1  0      1
4  1  1      2
5  0  0      1

In [38]: def func1(r):
   ....:     print(r['X'])
   ....:     print(r['Y'])
   ....:     return r
   ....:

2 个答案:

答案 0 :(得分:1)

当前行将始终是传递给函数的第一个参数,name_df.apply(calculate_stats, axis=1, args=(df, x, y, z)) 中的参数将在之后传递。

如果我理解你想要做什么,这应该有效:

calculate_stats(r, df, x, y, z)

这将计算r,其中import textwrap n = input("Max length: ") # for line in text.split("\n"): for line in text.splitlines(): print(textwrap.fill(textwrap.dedent(line), n)) 是应用该函数的数据帧的当前行。

答案 1 :(得分:0)

您是否尝试使用lambda,例如:

 name_df['concat'] = name_df.apply(lambda x: x['name1'] + x['name2'])

x将是当前行作为词典