簡體   English   中英

Pandas:如果滿足條件,則將列的值替換為前一行的值

[英]Pandas: Replace value of column with previous row value if condition is met

我有一個從具有以下結構的 txt 文件導入的 DataFrame:

            ID   Place            Name        Other
0    123456789    1100           NAME1      5468.85
1      NUMBER1    1100    DESCRIPTION1     
2         STR1            DESCRIPTION2       
3      NUMBER2                            OTHER_STR
4    987654321    1100           NAME2      4566.65
1      NUMBER1    1100    DESCRIPTION1     
2         STR1            DESCRIPTION2     

我想檢查類似下面的代碼,但我知道迭代 df 是一種不好的做法,而且我不是 Pandas 的專家:

for row in df:
    if row['Other'] == '' or row['Place'] == '':
        row['ID'] == previous_row['ID']

output 應如下所示:

            ID   Place            Name        Other
0    123456789    1100           NAME1      5468.85
1    123456789    1100    DESCRIPTION1     
2    123456789            DESCRIPTION2       
3    123456789                            OTHER_STR
4    987654321    1100           NAME2      4566.65
1    987654321    1100    DESCRIPTION1     
2    987654321            DESCRIPTION2     

請注意,任何行都可以是 STR、INT 或空白。 數據集略多於一百萬行乘 15 列,因此需要快速。

我已經嘗試過這里的建議,但它並不能完全確定要更新列值的條件。

使用pandas.Series.ffill

s = df["Place"].eq("") | df["Other"].eq("")
df.loc[s, "ID"] = pd.np.nan
df["ID"].ffill(inplace=True)
print(df)

Output:

          ID Place          Name      Other
0  123456789  1100         NAME1    5468.85
1  123456789  1100  DESCRIPTION1           
2  123456789        DESCRIPTION2           
3  123456789                      OTHER_STR
4  987654321  1100         NAME2    4566.65
1  987654321  1100  DESCRIPTION1           
2  987654321        DESCRIPTION2           

暫無
暫無

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

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