中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
python 數(shù)據(jù)錯位相減,上下兩行相減

今天接到一個需求,要求用對數(shù)據(jù)進行錯位相減。感覺寫得有點麻煩,如果其他方法,歡迎留言交流

數(shù)據(jù)說明:有客戶、消費日期、消費額度

求解目標(biāo):對于同一個客戶,對日期升序排序,如果下一個日期的消費額度大于上一個日期的消費額度,則標(biāo)記,最終取出第一次發(fā)生時對應(yīng)的較大的日期

最簡單的方法是使用 pandas.Series.shift 具體可參考官方文檔

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.shift.html

 

方法一是使用pandas.Series.shift,該方法可以方便地對數(shù)據(jù)進行移動

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.DataFrame({'persion':['A','A','A','A','B','B','B','B','B', 'C' ,'D','D','D']
  4. , 'date':[0, 1, 6, 4, 1, 7, 4, 5, 6, 3, 1, 2, 3]
  5. , 'price':[1, 5, 3, 0, 2, 4, 5, 8, 3, 5, 7, 7, 7 ]})
  6. # 組內(nèi)排序
  7. df['sort_id'] = df['date'].groupby(df['persion']).rank()
  8. df.sort_values(by = ['persion', 'sort_id'], axis=0, inplace=True)
  9. df['price_y'] = df["price"].shift(1)

 

方法二是自己寫的完整的數(shù)據(jù)處理方法,比較復(fù)雜,可作參考

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.DataFrame({'persion':['A','A','A','A','B','B','B','B','B', 'C' ,'D','D','D']
  4. , 'date':[0, 1, 6, 4, 1, 7, 4, 5, 6, 3, 1, 2, 3]
  5. , 'price':[1, 5, 3, 0, 2, 4, 5, 8, 3, 5, 7, 7, 7 ]})
  6. # 組內(nèi)排序
  7. df['sort_id'] = df['date'].groupby(df['persion']).rank()
  8. df.sort_values(by = ['persion', 'sort_id'], axis=0, inplace=True)
  9. # 添加每個persion的記錄數(shù)
  10. persion_dt = df['persion']
  11. persion_u = list(persion_dt.unique())
  12. persion_cout = df['persion'].value_counts().to_dict()
  13. persion_dt_dict = persion_dt.to_dict()
  14. for key, value in persion_dt_dict.items():
  15. persion_dt_dict[key] = persion_cout[value]
  16. df['persion_cout'] = persion_dt_dict.values() # 添加每個id的統(tǒng)計值
  17. # 數(shù)據(jù)移動,將下一條數(shù)據(jù)移動到上一行
  18. fill_data = pd.DataFrame({'date':[0], 'price':[0]}) # 填充為0, 也可以是其他值
  19. # df.loc[df['persion']==col_value, ['date', 'price']][1:].append(fill_data) 使移動后的數(shù)據(jù)行數(shù)與移動前一致
  20. slice_data = {col_value: df.loc[df['persion']==col_value, ['date', 'price']][1:].append(fill_data) for col_value in persion_u }
  21. new_data = pd.DataFrame()
  22. for key, value in slice_data.items():
  23. new_data = new_data.append(value)
  24. new_data.reset_index(drop=True, inplace=True)
  25. # 將移動后的數(shù)據(jù)與原數(shù)據(jù)拼接
  26. all_data = pd.merge(df, new_data, how='inner', left_index=True, right_index=True)
  27. all_data['diff'] = all_data['price_y'] - all_data['price_x']
  28. # 如果persion只有一條記錄,保留;如果每個月的price一樣,則保留最早的記錄
  29. all_data['flag'] = (all_data['persion_cout']==1) | (all_data['diff']>=0)
  30. all_data2 = all_data[all_data['flag'] == True]
  31. data_select = all_data2.groupby('persion', as_index=False).first() # 保留第一次取得的最大值
  32. # 將填充的0值改為有效值
  33. data_select.loc[data_select['date_y']==0, 'date_y'] = data_select.loc[data_select['date_y']==0, 'date_x']
  34. # 刪除無用的列
  35. data_select.drop(['sort_id', 'persion_cout', 'diff', 'flag'], axis=1, inplace=True)

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
pandas數(shù)據(jù)分析 | pandas.DataFrame數(shù)據(jù)修改、索引設(shè)置、數(shù)據(jù)組合
Python處理CSV、JSON和XML數(shù)據(jù)的簡便方法
解析pandas apply() 函數(shù)用法
使用Python pandas對不同列名的數(shù)據(jù)進行合并
將Python Pandas DataFrame寫入Word文檔
三種方式創(chuàng)建DataFrame
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服