公眾號:尤而小屋
作者:Peter
編輯:Peter
今天給大家分享一個粉絲朋友問的一道關於Pandas題,提供多種解決思路!
有下面的這樣一個DataFrame(數據是模擬的),找出每個數值第一次出現的索引號:
2第一次出現索引為0
3第一次出現索引為4
7第一次出現索引為6
這就是最終要展現的結果,如何解決?下面提供不同的解決思路
shift函數是在指定的軸方向上進行移動指定的長度:
1、先向下移動一個單位,得到df2
2、為了後面的處理,df2進行屬性字段的重命名:
df2.rename(columns={"col1":"col2"},inplace=True)
3、將df1和df2進行合並
4、篩選col1和col2不等的情況即可
完整的一行代碼如下:
下面我們拆解下這行代碼:
1、差分函數diff
每個數據和前一個數值相減;如果兩個值相等,差值為0
2、判斷和0的關系
3、鎖定為True的值即可
一個很巧妙的方法:直接去重,保留第一條數據;但這僅僅是特例
需求還是類似,找出每個數值第一次出現的索引;但是數據會重復隔斷出現。
下面已經標記了正確的結果:
還是可以解決
結果:
同樣可以解決:
但是去重函數在這種情況就不行:drop_duplicates函數是對整體數據的去重,只保留一條數據
在這裡重點理解下移位函數shift和差分函數diff的關系,模擬一份數據:
以默認移動一個單位為例
結論:在相同的條件下,原數據框 減掉 shift函數生成的數據就是diff函數的結果
什麼情況下會用到移位或者差分函數?
往期精彩回顧
適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼復現專輯機器學習交流qq群955171419,加入微信群請掃碼