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

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

pandas 按間隔填充以更正缺失/無效的條目

pandas 按間隔填充以更正缺失/無效的條目

拉風(fēng)的咖菲貓 2022-09-06 16:20:39
所以我有一個數(shù)據(jù)幀df = pandas.DataFrame([[numpy.nan,5],[numpy.nan,5],[2015,5],[2020,5],[numpy.nan,10],[numpy.nan,10],[numpy.nan,10],[2090,10],[2100,10]],columns=["value","interval"])    value  interval0     NaN         51     NaN         52  2015.0         53  2020.0         54     NaN        105     NaN        106     NaN        107  2090.0        108  2100.0        10我需要根據(jù)NaN值的間隔和該索引后面的第一個非nan向后填充NaN值,因此預(yù)期的輸出是    value  interval0  2005.0         5  # corrected 2010 - 5(interval)1  2010.0         5  # corrected 2015 - 5(interval)2  2015.0         5  # no change ( use this to correct 2 previous rows)3  2020.0         5  # no change4  2060.0        10  # corrected 2070 - 105  2070.0        10  # corrected 2080 - 10 6  2080.0        10  # corrected 2090 - 10 7  2090.0        10  # no change (use this to correct 3 previous rows)8  2100.0        10  # no change我不知道如何使用pandas / numpy矢量化操作來完成此任務(wù)...我可以用一個非常簡單的循環(huán)來做到這一點(diǎn)last_good_value = Nonefixed_values = []for val,interval in reversed(df.values):    if val == numpy.nan and last_good_value is not None:       fixed_values.append(last_good_value - interval)       last_good_value = fixed_values[-1]    else:       fixed_values.append(val)        if val != numpy.nan:           last_good_value = valprint (reversed(fixed_values))嚴(yán)格來說,這是有效的...但我想了解一個可以解析值并避免循環(huán)的pandas解決方案(這在現(xiàn)實(shí)中是一個相當(dāng)大的列表)
查看完整描述

2 回答

?
慕俠2389804

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

首先,獲取共享相同“間隔”值的組中行的位置。

然后,獲取每個組的最后一個值。

你要找的是“l(fā)ast_value - pos * interval”


df = df.reset_index()

grouped_df = df.groupby(['interval'])

df['pos'] = grouped_df['index'].rank(method='first', ascending=False) - 1 

df['last'] = grouped_df['value'].transform('last')

df['value'] = df['last'] - df['interval'] * df['pos']

del df['pos'], df['last'], df['index']


查看完整回答
反對 回復(fù) 2022-09-06
?
白板的微信

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

創(chuàng)建一個分組系列,該序列通過用 反轉(zhuǎn)來將最后一個非空值與其前面的所有行分組。然后,您可以并用于確定從每行中減去多少。NaN[::-1]bfillcumsum


s = df['value'].notnull()[::-1].cumsum()

subt = df.loc[df['value'].isnull(), 'interval'][::-1].groupby(s).cumsum()


df['value'] = df.groupby(s)['value'].bfill().subtract(subt, fill_value=0)

    value  interval

0  2005.0         5

1  2010.0         5

2  2015.0         5

3  2020.0         5

4  2060.0        10

5  2070.0        10

6  2080.0        10

7  2090.0        10

8  2100.0        10

因?yàn)?是 NaN 行的子集,所以確保具有值的行保持不變subtfill_value=0


print(subt)

#6    10

#5    20

#4    30

#1     5

#0    10

#Name: interval, dtype: int64


查看完整回答
反對 回復(fù) 2022-09-06
  • 2 回答
  • 0 關(guān)注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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