![](/img/trans.png)
[英]Filling missing values using forward and backward fill in pandas dataframe (ffill and bfill)
[英]python pandas dataframe filling e.g. bfill, ffill
我在填寫一個非常大的 dataframe 時遇到了兩個問題。 圖片有一段。 我希望 E 和 F 中的 1000 被拉低到 26 並且不再進一步。 以同樣的方式,我希望將 2000 拉到 -1 並拉到下一個 26。我想我可以用 bfill 和 ffill 做到這一點,但不幸的是我不知道如何......(圖片1)
另一個問題是出現的列中從 -1 到 26 的值不包含 E 和 F 中的任何值。如何刪除或用 0 填充它們,以便沒有 bfill 或 ffill 在那里輸入錯誤的條目? (圖二)
import pandas as pd
import numpy as np
data = '/Users/Hanna/Desktop/Coding/Code.csv'
df_1 = pd.read_csv(data,usecols=["A",
"B",
"C",
"D",
"E",
"F",
],nrows=75)
base_list =[-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
df_c = pd.MultiIndex.from_product([
[4000074],
["SP000796746","SP001811642"],
[201824, 201828, 201832, 201835, 201837, 201839, 201845, 201850, 201910, 201918, 201922, 201926, 201909, 201916, 201918, 201920],
base_list],
names=["A", "B", "C", "D"]).to_frame(index=False)
df_3 = pd.merge(df_c, df_1, how='outer')
可以找到你有 -1 的索引,然后對要填充的列進行切片/循環。
只是為了創建示例數據:
import pandas as pd
df = pd.DataFrame(columns=list('ABE'))
df['A']=list(range(-1, 26)) * 10
在每個部分添加隨機值
import random
for i in df.index:
if i%27 == 0:
df.loc[i,'B'] = random.random()
else:
df.loc[i, 'B'] = 0
找到要切片的索引
indx = df[df['A'] == -1].index.values
填寫“E”列中的數據
for i, j in zip(indx[:-1], indx[1:]):
df.loc[i:j-1, 'E'] = df.loc[i:j-1, 'B'].max()
if j == indx[-1]:
df.loc[j:, 'E'] = df.loc[j:, 'B'].max()
假設您必須查找並填充特定段的值。
data = pd.read_csv('/Users/Hanna/Desktop/Coding/Code.csv')
for i in range(0,data.shape[0],27):
if i+27 < data.shape[0]:
data.loc[i:i+27,'E'] = max(data['E'].iloc[i:i+27])
else:
data.loc[i:data.shape[0],'E'] = max(data['E'].iloc[i:data.shape[0]])
您可以將max
替換為您想要的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.