溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

pandas去除重復(fù)列的實現(xiàn)方法

發(fā)布時間:2020-10-25 20:05:37 來源:腳本之家 閱讀:486 作者:Emily_2018 欄目:開發(fā)技術(shù)

數(shù)據(jù)準(zhǔn)備

假設(shè)我們目前有兩個數(shù)據(jù)表:

① 一個數(shù)據(jù)表是關(guān)于三個人他們的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 為其索引

pandas去除重復(fù)列的實現(xiàn)方法

② 另外一個數(shù)據(jù)表是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]
# 輸出:

pandas去除重復(fù)列的實現(xiàn)方法

問題描述

① 首先我們需要統(tǒng)計每個用戶app操作記錄數(shù),比如上表可以看出用戶id為1的用戶有2條操作記錄,用戶id為3的用戶有3條操作記錄

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

pandas去除重復(fù)列的實現(xiàn)方法

② 此時,S是一個以id為索引,count出來的記錄數(shù)為value的Series結(jié)構(gòu)。因為考慮到后面我們需要id列進(jìn)行merge,所以我們需要讓id列從索引列變成真實的一列。

s = s.reset_index()
# 輸出:

pandas去除重復(fù)列的實現(xiàn)方法

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

解決方案

第一想法是用 DataFrame.drop(‘列名') 或者用 del DataFrame[‘列名']

但是如果用該方法,會刪除掉所有的重復(fù)列,而達(dá)不到我們的要求。

辦法是: 參考StackOverflow解答

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

pandas去除重復(fù)列的實現(xiàn)方法

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI