第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算 1. 最小值、2. 最小值左側(cè)的列的最大值以及 3. 最小值右側(cè)的列的最大值

計算 1. 最小值、2. 最小值左側(cè)的列的最大值以及 3. 最小值右側(cè)的列的最大值

拉丁的傳說 2023-08-22 10:42:59
這是 Python/ Pandas 的延續(xù):Finding a left and right max我有一個數(shù)據(jù)框,其中包含數(shù)據(jù)時間表。這是一個例子: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? ?為了進(jìn)行分析,我需要計算每行的以下值:nadir:最低點(diǎn)(分鐘)nadir_qtr:最低點(diǎn)發(fā)生的季度峰值前:最低點(diǎn)之前的最高點(diǎn)pre-peak_qtr:預(yù)峰值發(fā)生的季度峰后:最低點(diǎn)后的最高點(diǎn)post-peak_qtr:后峰值發(fā)生的季度在上一篇文章的幫助下,我使用了以下輔助函數(shù):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')我遇到的麻煩是第二行。將最低點(diǎn)作為第一列沒有意義,因此我更改了上面的代碼,只獲取前幾列之后的最低點(diǎn)。
查看完整描述

1 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個贊

您可以僅在第一列之后進(jìn)行選擇.iloc[:1,:],并使用一堆 pandas 方法,例如.min、.max、等:idxminidxmax


df['nadir'] = df.iloc[:,1:].min(axis=1)

df['nadir_qtr'] = df.iloc[:,1:].idxmin(axis=1).apply(lambda x: df.columns.get_loc(x))

df['new'] = [df.iloc[i].values for i in df.index]

df['pre_peak'] = df.apply(lambda x: max(x['new'][0:x['nadir_qtr']]), axis=1)

df['post_peak'] = df.apply(lambda x: max(x['new'][x['nadir_qtr']:]), axis=1)

df['pre_peak_qtr'] = pd.Series([s[i] for i, s in zip(df.index, df['pre_peak'].apply(

    lambda x: [i for i in (df.iloc[:,0:-6] == x)

               .idxmax(axis=1)]))]).apply(lambda x: df.columns.get_loc(x))

df['post_peak_qtr'] = pd.Series([s[i] for i, s in zip(df.index, df['post_peak'].apply(

    lambda x: [i for i in (df.iloc[:,0:-6] == x)

               .idxmax(axis=1)]))]).apply(lambda x: df.columns.get_loc(x))

df_new = df[['nadir', 'nadir_qtr', 'pre_peak', 'pre_peak_qtr', 'post_peak', 'post_peak_qtr']]

df_new

Out[1]: 

         nadir  nadir_qtr   pre_peak  pre_peak_qtr  post_peak  post_peak_qtr

idx                                                                         

0    4039370.0          7  4114911.0             1  4254681.0             11

1      21566.0          1    21226.0             0    23232.0              5

2      95958.0          7   103054.0             5   123064.0              9

3      22080.0         11    24186.0             2    22080.0             11

4       6722.0          7     7906.0             1     8326.0             11


查看完整回答
反對 回復(fù) 2023-08-22
  • 1 回答
  • 0 關(guān)注
  • 4240 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號