2017-06-23 61 views
2

我有一個熊貓數據框,看起來像這樣:如何更換大熊貓數據幀罕見的元素

      Date Time Spent (seconds)      Activity 
    0  2017-03-23T00:00:00     92     netflix.com 
    1  2017-03-23T00:05:00     158     netflix.com 
    2  2017-03-23T00:25:00     285     netflix.com 
    3  2017-03-23T00:30:00      5     netflix.com 
    4  2017-03-23T00:40:00     214     netflix.com 
    5  2017-03-23T00:45:00     300     netflix.com 
    6  2017-03-23T00:45:00      5 Google Calendar for Android 
    7  2017-03-23T00:45:00      3     Google Now 
    8  2017-03-23T00:45:00      1   LinkedIn - Android 
    9  2017-03-23T00:50:00     33     netflix.com 
    10  2017-03-23T01:10:00     167     netflix.com       

當我做了系列活動value_counts我得到如下:

WhatsApp Messenger Android   1111 
    netflix.com       881 
    mendeley desktop      756 
    sharelatex.com       722 
    Google Now        647 
    newtab         584 
    google.co.uk       501 
    microsoft word       449 

我會喜歡用字符串'other'來替換原始數據框中的計數/出現次數小於20的系列活動中的所有項目。

我已經考慮/嘗試通過手動迭代數據框並替換它們來做到這一點,但我的數據框有幾萬行,這是非常低效的。什麼是更好的方法來實現這一目標?

回答

4

讓我們用groupbytransform

df.assign(Activity=df.groupby('Activity')['Activity'].transform(lambda x: x if x.size>=20 else 'other')) 
0

你可以使用pd.Series.map這是非常快:

VC = df['Activity'].value_counts() 
df['Activity'] = df['Activity'].map(lambda p : p if VC[p]>20 else 'other') 
+0

謝謝!這工作,非常快:) –

1
df.loc[df.Activity.isin(vc.index[vc<20].values), 'Activity'] = 'other' 

其中vcvalue_counts

結果