使用shift()来比较行元素

时间:2017-04-20 21:46:46

标签: python-3.x pandas apply

我有下面的示例数据和代码,我尝试使用该函数遍历dataDF列并找到第一个增加值的情况,然后返回与dataDF列中的第一个增加值对应的Quarter值。我计划使用apply函数,但我不认为我正确使用shift()。如果我只是尝试返回dataDF.shift(),我会收到一个错误。我是python的新手所以非常感谢有关如何比较行到下一行或者我对shift()做错的任何提示。

示例数据:

 return dataDF.head(20).to_dict() 

{'Quarter': {246: '2008q3',
 247: '2008q4',
 248: '2009q1',
 249: '2009q2',
 250: '2009q3',
 251: '2009q4',
 252: '2010q1',
 253: '2010q2',
 254: '2010q3',
 255: '2010q4',
 256: '2011q1',
 257: '2011q2',
 258: '2011q3',
 259: '2011q4',
 260: '2012q1',
 261: '2012q2',
 262: '2012q3',
 263: '2012q4',
 264: '2013q1',
 265: '2013q2'},
 'dataDF': {246: 14843.0,
 247: 14549.9,
 248: 14383.9,
 249: 14340.4,
 250: 14384.1,
 251: 14566.5,
 252: 14681.1,
 253: 14888.6,
 254: 15057.700000000001,
 255: 15230.200000000001,
 256: 15238.4,
 257: 15460.9,
 258: 15587.1,
 259: 15785.299999999999,
 260: 15973.9,
 261: 16121.9,
 262: 16227.9,
 263: 16297.299999999999,
 264: 16475.400000000001,
 265: 16541.400000000001}}

代码:

 def find_end(x):
        qrts = []
        if (dataDF < dataDF.shift()):
        qrts.append(dataDF.iloc[0,:].shift(1))
 return qrts

3 个答案:

答案 0 :(得分:2)

IIUC:

In [46]: x.loc[x.dataDF.diff().gt(0).idxmax(), 'Quarter']
Out[46]: '2009q3'

说明:

In [43]: x
Out[43]:
    Quarter   dataDF
246  2008q3  14843.0
247  2008q4  14549.9
248  2009q1  14383.9
249  2009q2  14340.4
250  2009q3  14384.1
251  2009q4  14566.5
252  2010q1  14681.1
253  2010q2  14888.6
254  2010q3  15057.7
255  2010q4  15230.2
256  2011q1  15238.4
257  2011q2  15460.9
258  2011q3  15587.1
259  2011q4  15785.3
260  2012q1  15973.9
261  2012q2  16121.9
262  2012q3  16227.9
263  2012q4  16297.3
264  2013q1  16475.4
265  2013q2  16541.4

In [44]: x.dataDF.diff()
Out[44]:
246      NaN
247   -293.1
248   -166.0
249    -43.5
250     43.7   # <-------------------
251    182.4
252    114.6
253    207.5
254    169.1
255    172.5
256      8.2
257    222.5
258    126.2
259    198.2
260    188.6
261    148.0
262    106.0
263     69.4
264    178.1
265     66.0
Name: dataDF, dtype: float64

In [45]: x.dataDF.diff().gt(0).idxmax()
Out[45]: 250

答案 1 :(得分:2)

尝试

df.Quarter[df.dataDF > df.dataDF.shift()].iloc[0]

返回

'2009Q3'

答案 2 :(得分:1)

使用numpy查找大于argmax的{​​{1}} diff。然后使用0检索我们需要的get_value

value

受访者怎么样了?

enter image description here