stand_status.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. ##修订电池的状态码,处理对象为清洗后并合并清洗后合并gps的数据
  2. import pandas as pd
  3. import numpy as np
  4. def stand_status(df_merge,s_order_delta=600,lon_delta=2):
  5. ##构建状态的flag
  6. ##构建连续的flag标记为flag_block
  7. df_merge=df_merge.sort_values(["sn","time"],ascending = [True, True])
  8. df_merge["pack_crnt2"]=df_merge["pack_crnt"].copy()
  9. df_merge["pack_crnt2"].fillna(8888,inplace=True)
  10. df_merge['stand_block']=(df_merge["pack_crnt2"].shift(1) != 8888).astype(int).cumsum()
  11. ##首先统计在每个flag区间上的开始结束时间
  12. df_merge_time_b=df_merge[["time","sn","stand_block"]].groupby(["sn","stand_block"]).first()
  13. df_merge_time_e=df_merge[["time","sn","stand_block"]].groupby(["sn","stand_block"]).last()
  14. df_merge_longitude_min=df_merge[["longitude","sn","stand_block"]].groupby(["sn","stand_block"]).min()
  15. df_merge_longitude_max=df_merge[["longitude","sn","stand_block"]].groupby(["sn","stand_block"]).max()
  16. frames=[df_merge_time_b,df_merge_time_e,df_merge_longitude_min,df_merge_longitude_max]
  17. df_merge_choice = pd.concat(frames, axis=1, join='inner')
  18. df_merge_choice=df_merge_choice.reset_index()
  19. df_merge_choice.columns=["sn","stand_block","time_first","time_last","lon_min","lon_max"]
  20. df_merge_choice["order_delta"]=pd.to_timedelta(pd.to_datetime(df_merge_choice["time_last"])-pd.to_datetime(df_merge_choice["time_first"])).dt.total_seconds()
  21. df_merge_choice["order_delta_h"]=round(df_merge_choice["order_delta"]/3600,2)
  22. df_merge_choice["lon_delta"]=df_merge_choice["lon_max"] - df_merge_choice["lon_min"]
  23. df_merge_choice_result1=df_merge_choice[(df_merge_choice["order_delta"]>=s_order_delta)&(df_merge_choice["lon_delta"]<=lon_delta)]
  24. df_merge21=df_merge[ (df_merge["sn"].isin(df_merge_choice_result1["sn"]))&(df_merge["stand_block"].isin(df_merge_choice_result1["stand_block"])) ]
  25. df_merge=df_merge[~df_merge.index.isin(df_merge21.index)]
  26. df_merge=df_merge.drop(['pack_crnt2','stand_block'], axis=1, inplace=False)
  27. return df_merge