[英]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 並且不考慮A
和B
稍后再次出現。
非常感謝您的幫助:)
假設您的第二列名為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.