Path: csiph.com!aioe.org!.POSTED.CWNPynFSiCYe93CgUDJgTQ.user.gioia.aioe.org!not-for-mail From: dan258 Newsgroups: it.comp.lang.python Subject: minimi relativi in dataframe Date: Tue, 17 Mar 2020 11:32:59 +0100 Organization: Aioe.org NNTP Server Lines: 54 Message-ID: NNTP-Posting-Host: CWNPynFSiCYe93CgUDJgTQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 X-Notice: Filtered by postfilter v. 0.9.2 Xref: csiph.com it.comp.lang.python:7752 Ciao a tutti, vedo che il gruppo e' "poco" frequentato ma lascio lo stesso il mio messaggio in bottiglia, magari leggero' la risposta quando saro' all'ospizio e moriro' felice :-). Tornando seri, essendo alle prime armi ho un problema che non riesco a risolvere con i dataframe. Faccio un esempio ------------------------------------------------ from pandas import DataFrame data = DataFrame({'a':[2.3, 1.9, 3.5, 2.8, 3.1, 2.7, 3.3]}) mask = (data['a'].shift(1) > data['a']) & (data['a'].shift(-1) > data['a']) data['b'] = data.loc[mask,'a'] data['b'] = data['b'].shift(1) data = data.fillna(method='ffill') data['c'] = data['a']-data['b'] print data -------------------------------------------------- da cui si ricava questo dataframe a b c 0 2.3 NaN NaN 1 1.9 NaN NaN 2 3.5 1.9 1.6 3 2.8 1.9 0.9 4 3.1 2.8 0.3 5 2.7 2.8 -0.1 6 3.3 2.7 0.6 In a abbiamo una serie di valori In b vengono creati dei minimi relativi di quei valori In c faccio un controllo, e ho bisogno che nella colonna non ci siano valori negativi, quindi, per ogni riga, a deve essere maggiore di b. Nella riga 5 non accade e per correggere dovrei scorrere indietro (mai avanti) la colonna b finche' non trovo il primo valore di b minore di 2.7 In questo caso sarebbe 1.9 dovrei ottenere qualcosa del genere a b c 0 2.3 NaN NaN 1 1.9 NaN NaN 2 3.5 1.9 1.6 3 2.8 1.9 0.9 4 3.1 2.8 0.3 5 2.7 1.9 0.8 6 3.3 2.7 0.6 pensavo di usare expanding ma mi manca qualche tassello come si puo' fare senza iterare che ci mette una vita?