簡體   English   中英

如何向下填充(向前填充)pandas 中過濾的 dataframe 列

[英]How to filldown (forward fill) a filtered dataframe column in pandas

問題陳述:需要填寫過濾后的 dataframe。

我有一個很大的 dataframe。這里沒有顯示,但我在下面包含了一個虛擬 dataframe 作為示例。
我想要的唯一 Status/State 組合是 UP/GOOD 和 DOWN/BAD。
我的數據集目前有不需要的 DOWN/GOOD 組合,我正在嘗試通過填寫過濾后的 dataframe 將其更正為 DOWN/BAD。請就下面的代碼提出建議,它不起作用。 這個問題有幾個其他的解決方案,但我想要 filldown (.ffill) 方法。

謝謝!

未經過濾的數據集

在此處輸入圖像描述

過濾后的數據集:顯示關閉狀態

在此處輸入圖像描述

所需的解決方案

在此處輸入圖像描述

代碼:

"""This is a dummy dataframe"""
import pandas as pd
import numpy as np
dummydata=[["Up","Good"],["Up","Good"],["Up","Good"],["Down","Bad"],["Up","Good"],
           ["Down","Good"],["Down","Good"],["Down","Good"],["Up","Good"],["Up","Good"],
           ["Down","Bad"],["Up","Good"],["Up","Good"],["Up","Good"],["Up","Good"]]
df=pd.DataFrame(dummydata, columns=['Status','State'])
filt=df['Status']=="Down"
df2=df.loc[filt]
df2.loc[df2['State']=='Good','State']=""
df2.loc[df2.State=='','State']= np.nan
df2.loc[df2['State']=='','State']=df2['State'].ffill()
print(df,df2)

我當前的填充方法不起作用。 提供代碼。 任何幫助將不勝感激

這里不需要切片。

最簡單的方法是:

df2['State'] = df2['State'].replace('Good', np.nan).ffill()

Output:

   Status State
3    Down   Bad
5    Down   Bad
6    Down   Bad
7    Down   Bad
10   Down   Bad

用這個:

df.loc[df['Status']=='Down','State']='Bad'
df[df['Status']=='Down']

   Status State
3    Down   Bad
5    Down   Bad
6    Down   Bad
7    Down   Bad
10   Down   Bad

您可以使用條件直接過濾它們並分配它們。

代碼:

import pandas as pd
import numpy as np
dummydata=[["Up","Good"],["Up","Good"],["Up","Good"],["Down","Bad"],["Up","Good"],
        ["Down","Good"],["Down","Good"],["Down","Good"],["Up","Good"],["Up","Good"],
        ["Down","Bad"],["Up","Good"],["Up","Good"],["Up","Good"],["Up","Good"]]
df=pd.DataFrame(dummydata, columns=['Status','State'])
#Filter Status == Down and State == Good
df.loc[((df["Status"] == "Down") &  (df["State"] =="Good")), "State"] = "Bad"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM