亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

熊貓用相鄰的連續值替換少于 n 個連續值

熊貓用相鄰的連續值替換少于 n 個連續值

隔江千里 2023-05-05 14:23:32
假設我有以下 DataFrame dfdf = pd.DataFrame({"a" : [8,8,0,8,8,8,8,8,8,8,4,1,4,4,4,4,4,4,4,4,4,4,7,7,4,4,4,4,4,4,4,4,5,5,5,5,5,5,1,1,5,5,5,5,5,5,1,5,1,5,5,5,5]}我想規范化我的數據,如果連續值少于 3 次,則將值更改為相鄰的連續值。result:    df = pd.DataFrame({        "a" : [8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]}目前我通過手動迭代來完成這項工作,我認為熊貓有特殊的功能來做到這一點。
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

這有點麻煩,使用diff()、cumsum()和np.size來查找組的大小。使用mask()查找小于 3 的組并將其替換為ffill和bfill

s = df.groupby((df['a'].diff() != 0).cumsum()).transform(np.size)

df['a'] = df[['a']].mask(s < 3).ffill().bfill()


#result

[8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 4., 4., 4., 4., 4.,

? ?4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 5., 5.,

? ?5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5.,

? ?5., 5.]


查看完整回答
反對 回復 2023-05-05
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

使用NumPy將是有用的:


import numpy as np

import pandas as pd


df = pd.DataFrame({"a" : [8,8,0,8,8,8,8,8,8,8,

                          4,1,4,4,4,4,4,4,4,4,

                          4,4,7,7,4,4,4,4,4,4,

                          4,4,5,5,5,5,5,5,1,1,

                          5,5,5,5,5,5,1,5,4,5,

                          5,5,5]})


arr = df.values.reshape(-1)

sub = arr[1:]-arr[:-1]

add2 = sub[1:]+sub[:-1]  

add3 = sub[2:]+sub[:-2]

del2 = np.where((sub[1:]!=0) & (add2*sub[1:]==0))[0]+1

del3 = np.where((sub[2:]!=0) & (add3*sub[2:]==0))[0]+1

arr[del2] = arr[del2-1]

arr[del3] = arr[del3-1]

arr[del3+1] = arr[del3+2]

df = pd.DataFrame({"a" : arr})

print(arr)


'''

Output:

[8 8 8 8 8 8 8 8 8 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5

 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5]

'''


查看完整回答
反對 回復 2023-05-05
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號