pandas.DataFrame: how to applymap() with external arguments
有关更清楚的描述,请参见末尾的更新。
根据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的情况并非如此。
我想应用一个elementwise函数
举一个我想要的例子,假设我有一个数据框架
1 2 | def f(a, i): return a[i] |
这样我就可以做一个循环,返回
1 2 | for i in some_series: b[i] = df.applymap(f, i=i) |
号
这样,在每次迭代中,它都会将我的
我意识到,如果我为
另外,我目前理解它的方式(我可能是错的),当我使用
更新:
所以我才意识到我可以把
1 2 3 4 5 6 7 8 | 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,)) |
做我所期望的,并希望它做。但是,尝试使用数据帧:
1 2 3 4 5 6 | b = pd.DataFrame(index=range(4), columns=range(4), dtype=object) for i in b.index: for col in b.columns: b.loc[i,col] = np.random.rand(10) b.apply(f,args=(1,)) |
。
给了我一本书。
您可以使用它:
1 2 3 4 5 6 | def matchValue(value, dictionary): return dictionary[value] a = {'first': 1, 'second': 2} b = {'first': 10, 'second': 20} df['column'] = df['column'].map(lambda x: matchValue(x, a)) |
这是一种解决方案,其中参数存储在嵌套方法中
1 2 3 4 5 6 7 8 9 10 11 12 | 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)) |
号
大熊猫
不过,我建议您尝试使用