我希望将单个函数以元素方式应用于DataFrame。我也希望这个函数将当前列和索引作为参数。
例如:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: df = pd.DataFrame(np.arange(4).reshape(2, 2), index=['a', 'b'], columns=['c', 'd'])
In [4]: df.head()
Out[4]:
c d
a 0 1
b 2 3
现在我想要以下内容:
f = lambda x: foo(x, x.index_value, x.column_name)
df.apply(f)
在我的特定用例中,我有其他数据结构/函数,这些数据结构/函数是以这些值为基础的。到目前为止,我所尝试过的所有内容都至少丢失了一个级别的信息。
以下是foo()
示例:
def foo(x, idx, col):
# get data
a = a_data.loc[idx, col]
b = b_data.loc[idx, col]
return a * x + b
例如,我可以使用apply
并使用x.name
提取列名称或索引名称,但不能同时使用applymap
和In [4]: import itertools
In [5]: newdf = df.copy()
In [6]: for idx, col in itertools.product(df.index.values, df.columns):
...: newdf.loc[idx, col] = f(df.loc[idx, col], idx, col)
...:
仅将标量值传递给函数。
这是迄今为止我做过的最好的尝试。它很慢(而且不是很优雅),我会喜欢其他的建议:
$(document).ready(function () {
var year = $("#id_year");
year.datepicker({
format: " yyyy", // Notice the Extra space at the beginning
viewMode: "years",
minViewMode: "years",
onSelect: function(dateText) {
console.log(dateText);
var startDate = new Date(dateText);
year.val(startDate.getFullYear());
console.log(year.val());
}
});
/* year.on('changeDate', function(ev){
console.log("ssds");
year.val(ev.date.getFullYear());
console.log(year.val());
});*/
});
答案 0 :(得分:1)
一个想法是使用数据框的at
方法。 loc
也可以工作但速度稍慢。
foo = dict(a=1, b=2)
bar = dict(c=3, d=4)
for i in df.index:
for j in df.columns:
df.at[i, j] += foo[i] + bar[j]