簡體   English   中英

檢查 Pandas DataFrame 列中的序列

[英]Check for sequence in column of Pandas DataFrame

我的 DataFrame 看起來像這樣:

    Category       Date
81    Monate 2020-01-01
88    Monate 2020-01-02
58    Monate 2020-01-03
3     Monate 2020-01-04
23    Monate 2020-01-05
..       ...        ...
134   Wochen 2020-05-24
145     Tage 2020-05-25
147     Tage 2020-05-26
146     Tage 2020-05-27
148     Tage 2020-05-28

它按Date排序。 我需要檢查每一行 Monate 是否跟隨 Monate,Wochen 是否跟隨 Wochen 等等。 允許 Wochen 跟隨 Monate,Tage 跟隨 Wochen。 我希望我的意思很清楚。 看起來這應該會導致錯誤,因為序列無效。

    Category       Date
81    Monate 2020-01-01
88    Monate 2020-01-02
58    Tage   2020-01-03
3     Monate 2020-01-04
23    Monate 2020-01-05
..       ...        ...
134   Wochen 2020-05-24
145     Tage 2020-05-25
147     Tage 2020-05-26
146   Wochen 2020-05-27
148     Tage 2020-05-28

我可以嘗試在每一行上編寫一個非常復雜且可能很慢的迭代。

for row in result_df.iterrows():
    do xyz

有沒有更好更快的方法來檢查系列中的正在進行的序列,或者可能在列表、字典等中?

我相信您可以創建一個數字字典來說明順序並替換 Category 列的值,並檢查series.diff是否永遠不會使用series.all為負:

def check(dataframe):
    d = {'Monate':1,'Wochen':2,'Tage':3}
    return dataframe['Category'].replace(d).diff().fillna(0).ge(0).all()

測試運行:

print(df,'\n\n',f"Valid? : {check(df)}",'\n\n',df1,'\n\n',f"Valid? : {check(df1)}")

 Category        Date
81    Monate  2020-01-01
88    Monate  2020-01-02
58    Monate  2020-01-03
3     Monate  2020-01-04
23    Monate  2020-01-05
134   Wochen  2020-05-24
145     Tage  2020-05-25
147     Tage  2020-05-26
146     Tage  2020-05-27
148     Tage  2020-05-28 

 Valid? : True 

     Category        Date
81    Monate  2020-01-01
88    Monate  2020-01-02
58      Tage  2020-01-03
3     Monate  2020-01-04
23    Monate  2020-01-05
134   Wochen  2020-05-24
145     Tage  2020-05-25
147     Tage  2020-05-26
146   Wochen  2020-05-27
148     Tage  2020-05-28 

 Valid? : False

暫無
暫無

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

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