Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 Pandas Apply/Lambda返回数据帧而不是单行_Python_Pandas_Dataframe_Lambda - Fatal编程技术网

Python Pandas Apply/Lambda返回数据帧而不是单行

Python Pandas Apply/Lambda返回数据帧而不是单行,python,pandas,dataframe,lambda,Python,Pandas,Dataframe,Lambda,蟒蛇和熊猫是新手,所以请在这里耐心听我说 我创建了一个包含10行的数据框,其中有一列名为“Distance”,我想用apply和我创建的lambda函数计算一个新列(TotalCost)。函数下面的代码片段 def TotalCost(Distance, m, c): return m * df.Distance + c 其中Distance是数据帧df中的列,而m和c只是我前面在主代码中声明的常量 然后,我尝试以以下方式应用它: df = df.apply(lambda row: T

蟒蛇和熊猫是新手,所以请在这里耐心听我说

我创建了一个包含10行的数据框,其中有一列名为“Distance”,我想用
apply
和我创建的lambda函数计算一个新列(TotalCost)。函数下面的代码片段

def TotalCost(Distance, m, c):
    return m * df.Distance + c
其中
Distance
是数据帧
df
中的列,而
m
c
只是我前面在主代码中声明的常量

然后,我尝试以以下方式应用它:

df = df.apply(lambda row: TotalCost(row['Distance'], m, c), axis=1)
但是当运行这个程序时,我会一直将一个数据帧作为输出,而不是一行

编辑:添加输入和所需输出的示例

Input: df = {Distance: '1','2','3'}
如果我们假设m和c等于10, 然后应用函数的输出应该是

df['TotalCost'] = 20,30,40
我将在下面发布错误,但我在这里遗漏了什么?据我所知,我的语法是正确的。如有任何帮助,将不胜感激:)

错误消息:

ValueError: Wrong number of items passed 10, placement implies 1

这是一种更高效、更干净的存储方式:

df.eval('total_cost = @m * Distance + @c', inplace=True)
更新:我有时也坚持分配

df = df.assign(total_cost=lambda x: TotalCost(x['Distance'], m, c))

apply
中的lambda应该只处理一行。顺便说一句,
apply
仅返回计算列,而不是整个数据帧

def TotalCost(Distance,m,c): return m * Distance + c

df['TotalCost'] = df.apply(lambda row: TotalCost(row['Distance'],m,c),axis=1)

apply函数基本上每次将一行传递给lambda函数,然后返回数据帧的一个副本,其中包含已编辑或更改的值

最后,它返回由lambda函数返回的行构造的数据帧的修改副本,而不是更改原始数据帧

看看这个链接,它会帮助你获得更多的洞察力

初始数据帧

one two three
0   1   2   4
1   3   4   5
2   5   6   6
应用该函数后,应将其存储在res中

    one two three
0   5   7   11
1   9   11  13
2   13  15  15

请记住在提交任何问题之前格式化您的代码。如果您将输入示例与所需的输出一起发布,将会更容易。请看一下如何提供。谢谢你,我会给这两个尝试
    one two three
0   5   7   11
1   9   11  13
2   13  15  15