簡體   English   中英

熊貓數據透視表有條件計數

[英]Pandas Pivot Table Conditional Counting

我有一個簡單的數據幀:

df = pd.DataFrame({'id': ['a','a','a','b','b'],'value':[0,15,20,30,0]})
df
  id  value
0  a      0
1  a     15
2  a     20
3  b     30
4  b      0

我想要一個數值大於零的數據透視表。

我試過這個:

raw = pd.pivot_table(df, index='id',values='value',aggfunc=lambda x:len(x>0))

但是回復了這個:

    value
id
a       3
b       2

我需要的:

    value
id
a       2
b       1

我用groupby和filter閱讀了很多解決方案。 是否可以使用pivot_table命令實現此目的? 如果不是,哪種方法最好?

提前致謝

UPDATE

只是為了讓我更清楚為什么我要避免使用過濾器解決方案。 在我的真實和復雜的df中,我有其他列,如下所示:

df = pd.DataFrame({'id': ['a','a','a','b','b'],'value':[0,15,20,30,0],'other':[2,3,4,5,6]})
df
  id  other  value
0  a      2      0
1  a      3     15
2  a      4     20
3  b      5     30
4  b      6      0

我需要將列“其他”加起來,但是當我過濾時我得到了這個:

df=df[df['value']>0]
raw = pd.pivot_table(df, index='id',values=['value','other'],aggfunc={'value':len,'other':sum})
    other  value
id
a       7      2
b       5      1

代替:

    other  value
id
a       9      2
b      11      1

需要sum為條件x>0創建的計數True s:

raw = pd.pivot_table(df, index='id',values='value',aggfunc=lambda x:(x>0).sum())
print (raw)
    value
id       
a       2
b       1

正如@Wen所說,另一個解決方案是:

df = df[df['value'] > 0]
raw = pd.pivot_table(df, index='id',values='value',aggfunc=len)

您可以在透視之前過濾數據幀:

pd.pivot_table(df.loc[df['value']>0], index='id',values='value',aggfunc='count')

暫無
暫無

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

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