簡體   English   中英

Groupby 值計數 - pandas

[英]Groupby count of values - pandas

我希望從 pandas df 中計算特定值。 使用下面,我通過UpItem進行子集化,並將NumLabel分組以計算Item中的值。 output 中的值是正確的,但我想刪除Label並在列標題中包含Up

import pandas as pd

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' : ['Up','Left','Up','Left','Down','Right','Up','Down','Right','Down','Right','Up','Up','Right','Down','Left'],  
   })

df1 = (df[df['Item'] == 'Up']
      .groupby(['Num','Label'])['Item']
      .count()
      .unstack(fill_value = 0)
      .reset_index()
      )

預期 output:

  Num  A_Up  B_Up
    1     3     0
    2     1     1

通過您的方法,您可以將 Item 包含在 grouper 中。

out = (df[df['Item'] == 'Up'].groupby(['Num','Label','Item']).size()
       .unstack(['Label','Item'],fill_value=0))
out.columns=out.columns.map('_'.join)

print(out)

     A_Up  B_Up
Num            
1       3     0
2       1     1

您可以使用Groupby.transform來擁有所有列名。 然后使用df.pivot_tablelist comprehension來獲取您想要的列名。

In [2301]: x = df[df['Item'] == 'Up']
In [2304]: x['c'] = x.groupby(['Num','Label'])['Item'].transform('count')

In [2310]: x = x.pivot_table(index='Num', columns=['Label', 'Item'], aggfunc='first', fill_value=0)
In [2313]: x.columns = [j+'_'+k for i,j,k in x.columns]

In [2314]: x
Out[2314]: 
     A_Up  B_Up
Num            
1       3     0
2       1     1

暫無
暫無

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

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