在最后看到更新更清晰的说明。
根据http://pandas.pydata.org/pandas-docs/version/0.18.1/generated/pandas.DataFrame.apply.html,您可以将外部参数传递给apply函数,但applymap也是如此:http://pandas.pydata.org/pandas-docs/version/0.18.1/generated/pandas.DataFrame.applymap.html#pandas.DataFrame.applymap
我想应用元素函数f(a, i)
,其中a
是元素,i
是手动输入的参数。我需要的原因是因为我会在循环df.applymap(f)
中for i in some_list
。
举一个我想要的例子,说我有一个DataFrame df
,其中每个元素都是numpy.ndarray
。我想提取每个i
的{{1}}个元素,并从中形成一个新的DataFrame。所以我定义了ndarray
:
f
这样我就可以创建一个循环来返回def f(a, i):
return a[i]
中包含的每个np.ndarray
的第i个元素:
df
这样在每次迭代中,它都会将for i in some_series:
b[i] = df.applymap(f, i=i)
的值传递给函数i
。
我意识到如果我为f
使用MultiIndexing会更容易,但是现在,这就是我正在使用的。有没有办法在熊猫中做我想做的事情?理想情况下,我希望避免循环遍历df
中的所有列,并且我不明白为什么df
不会使用关键字参数,而applymap
会
另外,我目前理解它的方式(我可能错了),当我使用apply
时,它会给我每行/列的df.apply
个元素,而不是{{ 1}} - i
中包含的每个i
的元素。
更新:
所以我意识到我可以将ndarray
分成系列,然后使用可以做我想要的df
。让我生成一些数据来表明我的意思:
df
完全符合我的期望,并希望它能做到。但是,尝试使用DataFrame:
pd.Series.apply
给我def f(a,i):
return a[i]
b = pd.Series(index=range(10), dtype=object)
for i in b.index:
b[i] = np.random.rand(5)
b.apply(f,args=(1,))
。
答案 0 :(得分:1)
你可以使用它:
<link rel="stylesheet" type="text/css" href="https://developer.api.autodesk.com/viewingservice/v1/viewers/style.css" />
<script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/three.min.js?v=2.13.*"></script>
<script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/viewer3D.min.js?v=2.13.*"></script>
答案 1 :(得分:0)
Pandas applymap
不接受参数DataFrame.applymap(func)
。如果您希望将i
状态保持为状态,则可以将其存储为func
访问/修改的全局变量,或使用decorator
。
但是,我建议您尝试使用apply
方法。
答案 2 :(得分:0)
这是一种将参数存储在嵌套方法中的解决方案
f(cell,argument):
"""Do something with cell value and argument"""
return output
def outer(argument):
def inner(cell):
return f(cell,argument)
return inner
argument = ...
df.applymap(func = outer(argument))