這是 Python/ Pandas 的延續:Finding a left and right max我有一個數據框,其中包含數據時間表。這是一個例子:idx Q12000? ? ? Q22000? ? ? Q32000? ? ? Q42000? ? ? Q12001? ? ? Q22001? ? ? Q32001? ? ?Q42001? ? ? Q12002? ? ? Q22002? ? ? Q32002? ? ? Q420020? ?4085280.0? ?4114911.0? ?4108089.0? ?4111713.0? ?4055699.0? ?4076430.0? ?4043219.0? 4039370.0? ?4201158.0? ?4243119.0? ?4231823.0? ?4254681.01? ?21226.0? ? ?21566.0? ? ?21804.0? ? ?22072.0? ? ?21924.0? ? ?23232.0? ? ?22748.0? ? 22258.0? ? ?22614.0? ? ?22204.0? ? ?22500.0? ? ?22660.0? ? ?2? ?96400.0? ? ?102000.0? ? 98604.0? ? ?97086.0? ? ?96354.0? ? ?103054.0? ? 97824.0? ? 95958.0? ? ?115938.0? ? 123064.0? ? 120406.0? ? 120648.0? ?3? ?23820.0? ? ?24116.0? ? ?24186.0? ? ?23726.0? ? ?23504.0? ? ?23574.0? ? ?23162.0? ? 23078.0? ? ?22306.0? ? ?22334.0? ? ?22152.0? ? ?22080.0? ? ?4? ?7838.0? ? ? 7906.0? ? ? 7714.0? ? ? 7676.0? ? ? 7480.0? ? ? 7520.0? ? ? 7102.0? ? ?6722.0? ? ? 8324.0? ? ? 8166.0? ? ? 8208.0? ? ? 8326.0? ?為了進行分析,我需要計算每行的以下值:nadir:最低點(分鐘)nadir_qtr:最低點發生的季度峰值前:最低點之前的最高點pre-peak_qtr:預峰值發生的季度峰后:最低點后的最高點post-peak_qtr:后峰值發生的季度在上一篇文章的幫助下,我使用了以下輔助函數:from io import StringIOimport pandas as pddef calc_nadir(s):? ? assert isinstance(s, pd.Series)? ? return s.min()def calc_nadir_qtr(s):? ? return s.argmin()def calc_pre_peak(s):? ? return s[ : s.argmin()].max()def calc_pre_peak_quarter(s):? ? try:? ? ? ? qtr = s[ : s.argmin()].argmax()? ? except:? ? ? ? qtr = None? ? return qtrdef calc_post_peak(s):? ? return s[s.argmin() : ].max()def calc_post_peak_qtr(s):? ? return s[s.argmin() : ].argmax() + s.argmin()nadir = df.apply(lambda x: calc_nadir(x), axis=1).rename('nadir')nadir_qtr = df.apply(lambda x: calc_nadir_qtr(x), axis=1).rename('nadir_qtr')我遇到的麻煩是第二行。將最低點作為第一列沒有意義,因此我更改了上面的代碼,只獲取前幾列之后的最低點。
查看完整描述