dataframe之按时间筛选数据
生活随笔
收集整理的這篇文章主要介紹了
dataframe之按时间筛选数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對原始數據集進行篩選操作,條件是:客戶號、queryreason、querier三個相同的時候,開始計算querydate按從大到小排序,14內出現的刪除
功能描述
對數據集中具有相同key的記錄,按照時間字段從大到小進行排序,然后從最大時間開始,刪除間隔天數為14天以內的記錄
原始樣例數據如下:
key query_date 0 001 2020-07-01 1 002 2020-07-02 2 001 2020-07-04 3 001 2020-07-05 4 001 2020-07-06 5 001 2020-07-19 6 002 2020-07-12 7 002 2020-07-09 8 002 2020-07-23 9 002 2020-07-18 10 002 2020-07-29 11 001 2020-07-27分組排序后的數據如下:
key query_date 11 001 2020-07-27 5 001 2020-07-19 4 001 2020-07-06 3 001 2020-07-05 2 001 2020-07-04 0 001 2020-07-01 10 002 2020-07-29 8 002 2020-07-23 9 002 2020-07-18 6 002 2020-07-12 7 002 2020-07-09 1 002 2020-07-02對于001,最大日期是2020-07-27,001中2020-07-19的記錄相差小于14天,故將該記錄刪除
篩選后的結果:
key query_date 11 001 2020-07-27 4 001 2020-07-06 10 002 2020-07-29 9 002 2020-07-18 7 002 2020-07-09代碼實現:
""" 對df做如下操作:1、對df根據查詢機構、原因、客戶號生成一個key 2、按照key進行分租并對組內按照querydate倒序排列, 由于分組不好操作,這里直接受用二級排序 """import time import datetime import pandas as pddef date_diff(date1: object, date2: object) -> object:date1 = time.strptime(date1, "%Y-%m-%d")date2 = time.strptime(date2, "%Y-%m-%d")date1 = datetime.datetime(date1[0], date1[1], date1[2])date2 = datetime.datetime(date2[0], date2[1], date2[2])return (date2 - date1).daysdef dataframe_filter(df: pd.DataFrame, key_col: str, date_col: str, max_adjacent_day: int):df = df.sort_values([key_col, date_col], ascending=[1, 0])curr_date = Nonecurr_key = Nonefor index, row in df.iterrows():if curr_key != row['key']:curr_key = row['key']curr_date = row['query_date']continuediff = date_diff(row['query_date'], curr_date)if diff <= max_adjacent_day:df.loc[index]['query_date'] = Noneelse:curr_date = row['query_date']return df.dropna()if __name__ == '__main__':test_dict = {'key': ["001", "002", "001", "001","001", "001", "002", "002","002", "002", "002", "001"],'query_date': ['2020-07-01', '2020-07-02', '2020-07-04', '2020-07-05','2020-07-06', '2020-07-19', '2020-07-12', '2020-07-09','2020-07-23', '2020-07-18', '2020-07-29', '2020-07-27']}test_df = pd.DataFrame.from_dict(test_dict)print(test_df)print("-"*30)result_df = dataframe_filter(test_df, "key", "query_date", 8)print("篩選的結果: ")print(result_df)總結
以上是生活随笔為你收集整理的dataframe之按时间筛选数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人与大数据关系
- 下一篇: 淘宝母婴用品数据分析