簡體   English   中英

Groupby 計數值在 - pandas

[英]Groupby count values isin - pandas

我希望將一些 groupby 方法傳遞給 function。 使用下面,我有一個包含一組列表的 function。 然后我希望通過 function 將這些列表中的任何一個傳遞給單獨的組。 下面,我希望將Up傳遞給groupby count function。

這樣,我可以在第一個 function 中擁有任意數量的列表,就像可以用一行執行 groupby 一樣。

df = pd.DataFrame({      
    'Num' : [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2],
    'Label' : ['A','B','A','B','B','B','A','B','B','A','A','A','B','A','B','A'],   
    'Item' : ['Up1','Left2','Up2','Left3','Down1','Right2','Up2','Down4','Right2','Down1','Right2','Up1','Up3','Right4','Down2','Left2'],        
   })

def lists():

    Up = ['Up1', 'Up2', 'Up3', 'Up4']

    Down = ['Down1', 'Down1', 'Down1', 'Down1']

    Left = ['Up', 'Up', 'Up', 'Up']

    Right = ['Down1', 'Down1', 'Down1', 'Down1']

    return Up, Down, Left, Right


def counts(df, direction):

    df = (df[df['Item'].isin(direction)]
                  .groupby(['Num','Label'])['Item']
                  .count()
                  .unstack( 
                  fill_value = 0)
                  )

return df

 Up = counts(df, lists([0]))

預期 output:

Label  A  B
Num        
1      3  0
2      1  1

而不是這樣做:

Up = counts(df, lists([0]))

做這個:

Up = counts(df, lists()[0])

現在,如果您打印出來,您將獲得所需的Up

Label   A   B
Num         
1       3   0
2       1   1

解釋:

在您的代碼中: Up = counts(df, lists([0]))

您將list([0])作為參數傳遞給lists() function (實際上沒有參數),如果您調用lists() function 您將得到一個lists tuple

lists()

#output
(['Up1', 'Up2', 'Up3', 'Up4'],
 ['Down1', 'Down1', 'Down1', 'Down1'],
 ['Up', 'Up', 'Up', 'Up'],
 ['Down1', 'Down1', 'Down1', 'Down1'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM