我正在构建一个干净的、非硬编码(=不使用内部数据帧列名)函数模板的存储库,可以创建4种类型的函数:1个现有的1个新列,1个现有的1个新列,多个的1个新列,最后是多对多。在
前3个看起来像这样,并且起作用:
In [97]:
data={'level1':[20,19,20,21,25,29,30,31,30,29,31],
'level2': [10,10,20,20,20,10,10,20,20,10,10]}
index= pd.date_range('12/1/2014', periods=11)
frame=DataFrame(data, index=index)
In [98]:
def nonhardcoded_1to1(x):
y=x+2
return y
frame['test1to1']=frame['level1'].map(nonhardcoded_1to1)#works
def nonhardcoded_2to1(x,y):
z=x+y
return z
frame['test2to1']=frame[['level1','level2']].apply(lambda s: nonhardcoded_2to1(*s), axis=1)#works
def nonhardcoded_1to2(x):
y=x+12
z=x-12
return y, z
frame['test1to2a'], frame['test1to2b'] = zip(*frame['level1'].map(nonhardcoded_1to2))#works
现在,对于多对多函数,我得到了错误。我试图将上述“2to1”和“1-2”函数缝合在一起,但它们不能一起工作:
^{pr2}$所以我试着深入研究函数调用:
test=frame[['level1','level2']].apply(lambda s: nonhardcoded_2to2(*s), axis=1)
它返回了这个,所以理论上这至少看起来是有用的:
Out[104]:
level1 level2
2014-12-01 30 10
2014-12-02 29 9
2014-12-03 40 0
2014-12-04 41 1
2014-12-05 45 5
2014-12-06 39 19
2014-12-07 40 20
2014-12-08 51 11
2014-12-09 50 10
2014-12-10 39 19
2014-12-11 41 21
然后我试着:
test=zip(*frame[['level1','level2']].apply(lambda s: nonhardcoded_2to2(*s), axis=1))
test
返回一个元组序列。由于某些原因,它似乎会将结果的头文件转换成成对的。不知道为什么
[('l', 'l'), ('e', 'e'), ('v', 'v'), ('e', 'e'), ('l', 'l'), ('1', '2')]
我应该如何创建和调用这个函数以使其正常工作?在
目前没有回答
相关问题 更多 >
编程相关推荐