[英]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.