如何在所应用的函数中引用要应用函数的数据帧。
例如,我有一个名为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
....:
答案 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
将是当前行作为词典