为什么我不能在熊猫函数中应用shift?
我试图建立一个使用.shift()的函数,但它给了我一个错误。考虑一下:
In [40]:
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)
frame
Out[40]:
level1 level2
2014-12-01 20 10
2014-12-02 19 10
2014-12-03 20 20
2014-12-04 21 20
2014-12-05 25 20
2014-12-06 29 10
2014-12-07 30 10
2014-12-08 31 20
2014-12-09 30 20
2014-12-10 29 10
2014-12-11 31 10
正常功能可以正常工作。为了演示我使用直接和函数方法两次计算相同的结果:
In [63]:
frame['horizontaladd1']=frame['level1']+frame['level2']#works
def horizontaladd(x):
test=x['level1']+x['level2']
return test
frame['horizontaladd2']=frame.apply(horizontaladd, axis=1)
frame
Out[63]:
level1 level2 horizontaladd1 horizontaladd2
2014-12-01 20 10 30 30
2014-12-02 19 10 29 29
2014-12-03 20 20 40 40
2014-12-04 21 20 41 41
2014-12-05 25 20 45 45
2014-12-06 29 10 39 39
2014-12-07 30 10 40 40
2014-12-08 31 20 51 51
2014-12-09 30 20 50 50
2014-12-10 29 10 39 39
2014-12-11 31 10 41 41
但是当直接应用shift可以工作时,在一个函数中它不起作用:
frame['verticaladd1']=frame['level1']+frame['level1'].shift(1)#works
def verticaladd(x):
test=x['level1']+x['level1'].shift(1)
return test
frame.apply(verticaladd)#error
结果是
KeyError: ('level1', u'occurred at index level1')
我还尝试将单个列应用于我认为更有意义的一列,但是没有运气:
def verticaladd2(x):
test=x-x.shift(1)
return test
frame['level1'].map(verticaladd2)#error, also with apply
错误:
AttributeError: 'numpy.int64' object has no attribute 'shift'
为什么不直接打电话接班?我需要将其嵌入到一个函数中以沿轴1同时计算多个列。请参阅相关问题布尔逻辑的含糊真值
-
尝试将框架传递给函数,而不是使用
apply
(我不确定为什么apply
行不通,即使按列也不知道):def f(x): x.level1 return x.level1 + x.level1.shift(1) f(frame)
返回:
2014-12-01 NaN 2014-12-02 39 2014-12-03 39 2014-12-04 41 2014-12-05 46 2014-12-06 54 2014-12-07 59 2014-12-08 61 2014-12-09 61 2014-12-10 59 2014-12-11 60 Freq: D, Name: level1, dtype: float64
-
为什么我不能在循环中附加熊猫数据框
2021-01-29 关注 0 浏览59 1答案
-
为什么我不能在jQuery的document.ready()中定义函数?
2021-02-02 关注 0 浏览94 1答案
-
为什么我不能在Java中删除空格?
2021-01-29 关注 0 浏览118 1答案
-
为什么我不能在python中创建轮子?
2021-01-29 关注 0 浏览101 1答案
-
为什么我不能在包外使用受保护的构造函数?[重复]
2021-01-29 关注 0 浏览109 1答案
-
为什么我的XPath查询(抓取HTML表)只能在Firebug中工作,而不能在我正在开发的应用程序中工作?
2021-02-02 关注 0 浏览57 1答案
-
Java:为什么我不能在Comparator中抛出异常?
2021-01-30 关注 0 浏览78 1答案
-
为什么我不能在Python中设置全局变量?
2021-01-29 关注 0 浏览104 1答案
-
为什么我不能在Java中“静态导入”“等于”方法?
2021-01-30 关注 0 浏览85 1答案
-
为什么我不能在 python 中创建一个轮子?
2022-07-28 关注 0 浏览11 1答案