Python 如何在应用的函数中引用应用函数的数据帧
如何在应用的函数中引用应用函数的数据帧 例如,我有一个名为name_df的数据帧。它有4列(没有指定的索引) 我有一个名为calculate_stats的函数,它接受几个参数(整型值和df的混合) 在calculate_stats中,我想参考Python 如何在应用的函数中引用应用函数的数据帧,python,pandas,apply,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)) 在计算统计数据时,我使用r['name1']和r['nam
name_df['name1']
和name_df['name2']
我做到了:
name_df.apply(calculate_stats, axis=1, args=(r, df,x,y,z))
在计算统计数据时,我使用r['name1']
和r['name2']
但出现一个错误,指示NameError:未定义名称“r”
在下文中,它们将函数func1应用于数据帧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
....:
您是否尝试使用lambda,例如:
name_df['concat'] = name_df.apply(lambda x: x['name1'] + x['name2'])
x
将是当前行作为dict当前行将始终是传递给函数的第一个参数,args
中的参数将在后面传递
如果我正确地理解了您正在尝试做的事情,这应该会起作用:
name_df.apply(calculate_stats, axis=1, args=(df, x, y, z))
这将计算
calculate_stats(r,df,x,y,z)
其中r
是应用函数的数据帧的当前行。当前行始终是传递给函数的第一个参数,args
中的参数将在后面传递。我没有使用lambda,因为calculate_stats()这是一个复杂的函数。它对输入数据帧df执行许多操作,并因此生成多个数据帧。基本上,我想提取name_df['name1']和name_df['name2'],迭代name_df中的每一行,并对每个name1和name2组合执行操作。是的,这正是我想要做的。你的建议解决了那个问题。然而,现在我遇到了另一个问题。在df.apply()操作中是否可以返回多个数据帧?或者我需要像df1,df2=name_df.apply(calculate_stats,axis=1,args=(df,x,y,z))这样的操作,这会产生一个错误。这就是错误:ValueError:需要超过1个值才能解包我认为这是不可能的。您可以让apply
返回具有多列的数据帧df
,然后执行例如df1=df['col1']
和df2=df['col2']
。从中,apply
返回序列或数据帧。你不能返回两个数据帧。明白了。所以我更改了calculate_stats()以生成一个数据帧。但是,我现在得到以下错误:ValueError:无法将大小为45的序列复制到维度为6的数组轴。