繁体   English   中英

将函数应用于带参数的熊猫系列(每个元素都不同)

[英]Apply function to pandas Series with argument (which varies for every element)

我有一个熊猫系列,我想将其应用于该系列的每个元素。 该函数也有一个附加参数。 到目前为止很好:例如

python pandas:将带有参数的函数应用于系列。 更新

如果参数本身在给定列表上运行会发生变化,该怎么办? 我不得不在代码中面对这个问题,并且找到了一个简单的解决方案,但是它非常具体,(甚至更糟)不使用apply方法。

这是一个玩具模型代码:

a=pd.DataFrame({'x'=[1,2]})
t=[10,20]

我想将a ['x']中的元素乘以t中的元素。 这里的函数非常简单,len(t)与len(a ['x']。index)匹配,所以我可以这样做:

a['t']=t
a['x*t']=a['x']*a['t']

但是,如果函数更复杂或者两个长度不匹配怎么办?

我想要的是一个命令行,例如:

a['x'].apply(lambda x,y: x*y, arg=t)

关键是该特定行以错误退出,因为在这种情况下,arg变量将仅接受len = 1的元组。 我看不到将t的各个元素放入的任何“位置”。

您要查找的内容与R称为“回收”的相似之处,即对长度不等的数组进行的操作根据需要遍历较小的数组多次,以匹配较长的数组的长度。

我不知道使用numpy或pandas的任何简单的内置方法。 您可以使用np.tile重复较小的数组。 就像是:

a.x*np.tile(t, len(a)/len(t))

仅当较长数组的长度是较短数组的简单倍数时,此方法才有效。

您想要的行为有些不寻常。 根据您的操作,可能会有更好的处理方法。 仅依靠重复来依靠值以所需的方式进行匹配就有些脆弱。 如果您有某种方法可以匹配要相乘的每个数组中的值,则可以使用Series的.map方法选择正确的“其他值”来与Series的每个元素相乘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM