數據準備
假設我們目前有兩個數據表:
① 一個數據表是關于三個人他們的id以及其他的幾列屬性信息
import pandas as pdimport numpy as npdata = 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[‘列名']
但是如果用該方法,會刪除掉所有的重復列,而達不到我們的要求。
辦法是: 參考StackOverflow解答
cols_to_use = s.columns.difference(data.columns) # pandas版本在0.15及之上的都可以用這種方法,該方法找出S和data表的不同列,然后再進行mergepd.merge(data, s[cols_to_use], left_index=True, right_index=True, how='outer')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。
新聞熱點
疑難解答