pandas去除重複列
阿新 • • 發佈:2019-01-02
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及之上的都可以用這種方法,該方法找出S和data表的不同列,然後再進行merge
pd.merge(data, s[cols_to_use], left_index=True, right_index=True, how='outer')