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

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

Pandas 滾動(dòng)函數(shù)加值

Pandas 滾動(dòng)函數(shù)加值

FFIVE 2022-05-24 12:55:22
我有一個(gè)非常標(biāo)準(zhǔn)的函數(shù),它似乎會(huì)產(chǎn)生非常奇怪的響應(yīng);我以為我已經(jīng)弄清楚發(fā)生了什么,但現(xiàn)在我不太確定。本質(zhì)上,我想使用滾動(dòng)函數(shù)來創(chuàng)建之前兩個(gè)值的簡單滾動(dòng)平均值。當(dāng)我直接執(zhí)行此操作時(shí),它似乎從框架中的其他位置提取第一個(gè)數(shù)字的值,而當(dāng)我在循環(huán)中執(zhí)行此操作時(shí),我不知道它來自哪里。樣本數(shù)據(jù):player  game_id game_order  TOI_comp    G_compA.J..GREER  2016020227  37  16.566667   02016020251  36  11.733333   02016020268  35  12.700000   02016020278  34  15.433333   02016020296  33  11.850000   0player_avgs_base.sort_values(by=['player','game_order'],ascending=False, inplace=True)avgtoi = player_avgs_base["TOI_comp"].rolling(2).mean().shift()avgtoiplayer         game_id     game_orderZENON.KONOPKA  2013021047  2                   NaNA.J..GREER     2016020268  35                  NaN               2016020278  34             9.308333               2016020296  33            14.066667               2017020134  32            13.641667               2017020149  31            10.108333               2017020165  30             7.175000               2017020194  29             6.100000我本來希望更像player         game_id     game_order    A.J..GREER     2016020251  36                  NaN                   2016020268  35                  NaN                   2016020278  34                12.22                    2016020296  33            14.066667                   2017020134  32            13.641667                   2017020149  31            10.108333
查看完整描述

1 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

我認(rèn)為這是一個(gè)排序問題。如果這能解決您的問題,請您嘗試一下:


player_avgs_base.sort_values(["player","game_order"], ascending=False, inplace=True) 

如果愿意,您可以在執(zhí)行排序后設(shè)置索引。


另一點(diǎn)是,對于您的代碼,滾動(dòng)不尊重分組。我猜你想計(jì)算每個(gè)玩家的滾動(dòng)總和,對,而不是混合其他玩家的價(jià)值。如果是這樣,您可以使用以下代碼:


df2= df.sort_values(["player",'game_id',"game_order"])

df2['TOI_comp_avg_lt']= df2.groupby('player')['TOI_comp'].apply(lambda ser: ser.rolling(2).mean().shift())

這輸出:


          player     game_id  game_order   TOI_comp  G_comp  TOI_comp_avg_lt

0     A.J..GREER  2016020227          37  16.566667       0              NaN

2     A.J..GREER  2016020251          36  11.733333       0              NaN

4     A.J..GREER  2016020268          35  12.700000       0        14.150000

6     A.J..GREER  2016020278          34  15.433333       0        12.216666

7     A.J..GREER  2016020296          33  11.850000       0        14.066666

1  ZENON.KONOPKA  2013021047          34  12.666666       0              NaN

5  ZENON.KONOPKA  2013021047          35  14.722222       0              NaN

3  ZENON.KONOPKA  2013021047          37  13.111111       0        13.694444

對于以下測試數(shù)據(jù):


import pandas as pd

import io


raw= """A.J..GREER     2016020227  37  16.566667   0

ZENON.KONOPKA  2013021047  34  12.666666   0

A.J..GREER     2016020251  36  11.733333   0

ZENON.KONOPKA  2013021047  37  13.111111   0

A.J..GREER     2016020268  35  12.700000   0

ZENON.KONOPKA  2013021047  35  14.722222   0

A.J..GREER     2016020278  34  15.433333   0

A.J..GREER     2016020296  33  11.850000   0"""


df= pd.read_csv(io.StringIO(raw), sep='\s+', names=['player', 'game_id', 'game_order', 'TOI_comp', 'G_comp'])

順便提一句。你set_index的不能替代排序。該索引對輸出沒有影響。例如,如果您df按照上面的定義使用并執(zhí)行:


df_indexed= df.set_index(["player",'game_id',"game_order"]) 

df_indexed_result= df_indexed.copy()

df_indexed_result['TOI_comp_shifted']= df_indexed["TOI_comp"].shift()

df_indexed_result['TOI_comp_rolling_mean']= df_indexed["TOI_comp"].rolling(2).mean().shift()

你得到:


                                      TOI_comp  G_comp  TOI_comp_shifted  TOI_comp_rolling_mean

player        game_id    game_order                                                            

A.J..GREER    2016020227 37          16.566667       0               NaN                    NaN

ZENON.KONOPKA 2013021047 34          12.666666       0         16.566667                    NaN

A.J..GREER    2016020251 36          11.733333       0         12.666666              14.616667

ZENON.KONOPKA 2013021047 37          13.111111       0         11.733333              12.200000

A.J..GREER    2016020268 35          12.700000       0         13.111111              12.422222

ZENON.KONOPKA 2013021047 35          14.722222       0         12.700000              12.905555

A.J..GREER    2016020278 34          15.433333       0         14.722222              13.711111

              2016020296 33          11.850000       0         15.433333              15.077777

如果您查看該TOI_comp_shifted列,您會(huì)發(fā)現(xiàn)它只是填充了前一列的值,無論player它屬于哪一列(滾動(dòng)平均值也是如此)。所以索引對這個(gè)操作沒有影響。


對于你的第二個(gè)問題。我認(rèn)為循環(huán)應(yīng)該像這樣工作,如果你的數(shù)據(jù)框的列名是好的:


group_obj= df2.groupby('player')

for col in ['TOI_comp', 'G_comp']:

    df2[f'{col}_lt']= group_obj[col].apply(lambda ser: ser.rolling(2).mean().shift())

假設(shè)您想以相同的方式將滾動(dòng)平均值應(yīng)用于列列表。


查看完整回答
反對 回復(fù) 2022-05-24
  • 1 回答
  • 0 關(guān)注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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