Python Pandas Apply/Lambda返回数据帧而不是单行
蟒蛇和熊猫是新手,所以请在这里耐心听我说 我创建了一个包含10行的数据框,其中有一列名为“Distance”,我想用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
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