亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在考慮列 Python 的同時使用 pandas.qcut

在考慮列 Python 的同時使用 pandas.qcut

慕婉清6462132 2021-08-11 20:01:12
我有以下數據框:并使用 pandas.qcut 函數我正在嘗試創建一個新列,該列按 Animal 減少 3 倍,如下所示:到目前為止,這是我的代碼:    import pandas as pddf=pd.DataFrame({'Name':['Harry','Sally','Mary','John','Francis','Devon','James','Holly','Molly','Nancy','Ben'], 'Score': [43,234,54,34,12,43,54,65,23,12,32],                 'Animal': ['dog', 'dog', 'cat', 'cat', 'dog', 'horse', 'dog', 'snake', 'dog', 'mouse', 'horse']})tiles = pd.qcut(df.index, 3, labels=False)tiles=tiles+1df['tiles']=tilesprint(df)如何讓我的 qcut 函數將我的“動物”列計入我的帳戶?
查看完整描述

2 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

我不知道是否qcut可行,但是您可以使用groupby('Animal').cumcount, 并取累積計數和 3 ( % 3)的模數來執行此操作:


>>> df

   Animal     Name

0     cat    Harry

1     cat    Sally

2     cat     Mary

3     dog     John

4     dog  Francis

5     dog    Devon

6     dog    James

7   horse    Holly

8   mouse    Molly

9   mouse    Nancy

10  snake      Ben


df['Tile'] = (df.groupby('Animal').cumcount()%3)+1


>>> df

   Animal     Name  Tile

0     cat    Harry     1

1     cat    Sally     2

2     cat     Mary     3

3     dog     John     1

4     dog  Francis     2

5     dog    Devon     3

6     dog    James     1

7   horse    Holly     1

8   mouse    Molly     1

9   mouse    Nancy     2

10  snake      Ben     1


查看完整回答
反對 回復 2021-08-11
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

成功的關鍵是適當的函數生成Tile值:


def tbl(x):

    ccl = itertools.cycle([1,2,3])

    lst = [ next(ccl) for _ in range(len(x)) ]

    return pd.Series(lst, x.index)

它的工作原理就像cumcount()有一點不同:相反順序編號(從range)它產生的順序循環[1,2,3]使用itertools.cycle。


然后你所要做的(在必要的導入和創建源 DataFrame 之后)是:


按 對值進行排序Animal。

Group by Animal,取任何列(例如Name)并將上述功能應用于它們。

所以整個腳本(沒有tbl聲明)可以如下:


import pandas as pd

import itertools


df = pd.DataFrame( {'Name': ['Harry', 'Sally', 'Mary', 'John', 'Francis',

        'Devon', 'James', 'Holly', 'Molly', 'Nancy', 'Ben'],

    'Score': [43, 234, 54, 34, 12, 43, 54, 65, 23, 12, 32],

    'Animal': ['dog', 'dog', 'cat', 'cat', 'dog', 'horse', 'dog', 'snake',

        'cat', 'mouse', 'mouse']})

df.sort_values(by='Animal', inplace=True)

df['Tile'] = df.groupby('Animal')['Name'].apply(tbl)

當你打印時df,結果是:


       Name  Score Animal  Tile

2      Mary     54    cat     1

3      John     34    cat     2

8     Molly     23    cat     3

0     Harry     43    dog     1

1     Sally    234    dog     2

4   Francis     12    dog     3

6     James     54    dog     1

5     Devon     43  horse     1

9     Nancy     12  mouse     1

10      Ben     32  mouse     2

7     Holly     65  snake     1



查看完整回答
反對 回復 2021-08-11
  • 2 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號