1. 程式人生 > >pandas去除重複列

pandas去除重複列

OUTLINE

  • 資料準備
  • 問題描述
  • 解決方案

資料準備

假設我們目前有兩個資料表:
① 一個數據表是關於三個人他們的id以及其他的幾列屬性資訊

import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randint(low=1,high=20,size=(3,4)))
data['id'] = range(1,4)
# 輸出:其中,最左邊的0 1 2 為其索引

② 另外一個數據表是3個使用者的app操作日誌資訊,一個人會有多條app操作記錄

sample = pd.DataFrame(np.random
.randint(low=1,high=9,size=(7,1)),columns=['hhh']) sample['id'] = [1,1,2,2,3,3,3] # 輸出:

問題描述

① 首先我們需要統計每個使用者app操作記錄數,比如上表可以看出使用者id為1的使用者有2條操作記錄,使用者id為3的使用者有3條操作記錄

s = sample.groupby('id').count()
# 輸出:

② 此時,S是一個以id為索引,count出來的記錄數為value的Series結構。因為考慮到後面我們需要id列進行merge,所以我們需要讓id列從索引列變成真實的一列。

s = s.reset_index()
# 輸出:

③ 將S與最上的data表進行merge,我們不想要看到重複的id列,甚至我們也可以將問題延伸為S與data表不止是id列的重複,還有好多條其他的列的重複,那麼如何保證將它們merge之後沒有重複列呢?

解決方案

第一想法是用 DataFrame.drop(‘列名’) 或者用 del DataFrame[‘列名’]
但是如果用該方法,會刪除掉所有的重複列,而達不到我們的要求。

cols_to_use = s.columns.difference(data.columns) # pandas版本在0.15及之上的都可以用這種方法,該方法找出Sdata表的不同列,然後再進行merge
pd.merge(data, s[cols_to_use], left_index=True, right_index=True, how='outer')