Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在应用的函数中引用应用函数的数据帧_Python_Pandas_Apply - Fatal编程技术网

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

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的数据帧。它有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['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的数组轴。