簡體   English   中英

pandas 重復塊上的 drop_duplicates

[英]pandas drop_duplicates on blocks of duplicates

我試圖找到一個優雅的解決方案,將緩慢移動的數據的完整時間序列轉換為壓縮形式,然后我可以將其與 pd.merge_asof 一起使用。

例如下面的數據框:

2023-01-01  A
2023-01-02  B
2023-01-03  B
2023-01-04  B
2023-01-05  C
2023-01-06  C
2023-01-07  A
2023-01-08  B

我想要實現的是保留重復塊的第一條記錄,即

2023-01-01  A
2023-01-02  B
2023-01-05  C
2023-01-07  A
2023-01-08  B

想到的是df.sort_index().drop_duplicates(keep='first')但它執行全局 groupby 並且不考慮AB稍后再次出現。

非常感謝您的幫助:)

假設您的第二列名為name (例如),使用pandas.DataFrame.shift function 的簡短方法捕獲每個連續組中的第一個唯一值(向下走):

df[df['name'] != df['name'].shift(1)]

           name
2023-01-01    A
2023-01-02    B
2023-01-05    C
2023-01-07    A
2023-01-08    B

您應該使用shift function 將每一行與前一行進行比較,然后檢查值列中的更改。 現在您可以使用 boolean 索引到發生更改的 select 行。

df["date"] = pd.to_datetime(df["date"])
df["change"] = df["value"] != df["value"].shift()
df = df[df["change"]]

df =df.drop(columns=["change"])

Output:

        date value
0 2023-01-01     A
1 2023-01-02     B
4 2023-01-05     C
6 2023-01-07     A
7 2023-01-08     B

暫無
暫無

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

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