一道Pandas題:3種解法

語言: CN / TW / HK

theme: smartblue

公眾號:尤而小屋
作者:Peter
編輯:Peter

大家好,我是Peter~

今天給大家分享一個粉絲朋友問的一道關於Pandas題。看上去題目需求簡單,實際上自己體會!

需求(基礎版本)

有下面的這樣一個DataFrame(數據是模擬的),找出每個數值第一次出現的索引號:

  • 2第一次出現索引為0
  • 3第一次出現索引為4
  • 7第一次出現索引為6

這就是最終要展現的結果,如何解決?下面提供不同的解決思路

方法1-移位函數shift

shift函數是在指定的軸方向上進行移動指定的長度:

1、先向下移動一個單位,得到df2

2、為了後面的處理,df2進行屬性字段的重命名:

python df2.rename(columns={"col1":"col2"},inplace=True)

3、將df1和df2進行合併

4、篩選col1和col2不等的情況即可

方法2-差分函數diff

完整的一行代碼如下:

下面我們拆解下這行代碼:

1、差分函數diff

每個數據和前一個數值相減;如果兩個值相等,差值為0

2、判斷和0的關係

3、鎖定為True的值即可

方法3

一個很巧妙的方法:直接去重,保留第一條數據;但這僅僅是特例

需求(升級版)

需求還是類似,找出每個數值第一次出現的索引;但是數據會重複隔斷出現。

下面已經標記了正確的結果:

方法1-shift函數

還是可以解決

結果:

方法2-差分函數diff

同樣可以解決:

但是去重函數在這種情況就不行:drop_duplicates函數是對整體數據的去重,只保留一條數據

延伸知識點

在這裏重點講下移位函數shift和差分函數diff的關係,模擬一份數據:

diff函數

shift函數

二者關係

以默認移動一個單位為例

結論:在相同的條件下,原數據框 減掉 shift函數生成的數據就是diff函數的結果

思考題

什麼情況下會用到移位或者差分函數?