2017-04-20 6 views
2

私は、関数を使用してdataDF列をループし、最初の値を見つけて1番目に対応する四分値dataDF列から値を増やします。私は適用で関数を使用する予定ですが、私はshift()を適切に使用しているとは思わない。私がdataDF.shift()を返そうとすると、エラーが発生します。私はPythonに新しいので、行を次の行と比較する方法やshift()で間違っていることについてのヒントがあれば幸いです。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 

答えて

2

0よりdiffargmaxが大きい見つけることnumpyを使用し

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

戻り

'2009q3'

+1

感謝。私はシフトを完全に後ろ向きにしようとしていました。 – user3476463

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

を試してみてください。その後、get_valueを使用して、valueを取得する必要があります。 speeeeedについて

v = dataDF.dataDF.values 
j = dataDF.columns.get_loc('Quarter') 
dataDF.get_value((np.diff(v) > 0).argmax() + 1, j, takeable=True) 

'2009q3' 

何!トリックをした、と本当に簡単

enter image description here

関連する問題