簡體   English   中英

兩個值匹配pandas時的累計計數

[英]Cumulative count when two values match pandas

我正在嘗試創建一個新Column ,該columns在單獨的columns中顯示基於值的cumulative count

因此,對於下面的代碼,我正在嘗試基於Cause and Answer Columns創建兩個新列。 因此對於Column Answer的值,如果In位於Column Cause我想在新列中提供累積計數。

import pandas as pd

d = ({
    'Cause' : ['In','','','In','','In','In'],
    'Answer' : ['Yes','No','Maybe','No','Yes','No','Yes'],
    })

df = pd.DataFrame(d)

輸出:

  Answer Cause
0    Yes    In
1     No      
2  Maybe      
3     No    In
4    Yes      
5     No    In
6    Yes    In

預期產出:

  Answer Cause Count_No Count_Yes
0    Yes    In                  1
1     No                         
2  Maybe                         
3     No    In        1          
4    Yes                         
5     No    In        2          
6    Yes    In                  2

我嘗試過以下但是出錯了。

df['cumsum'] = df.groupby(['Answer'])['Cause'].cumsum()

這是一種方式 -

for val in ['Yes', 'No']:
    cond = df.Answer.eq(val) & df.Cause.eq('In')
    df.loc[cond, 'Count_' + val] = cond[cond].cumsum()

df
#  Cause Answer  Count_Yes  Count_No
#0    In    Yes        1.0       NaN
#1           No        NaN       NaN
#2        Maybe        NaN       NaN
#3    In     No        NaN       1.0
#4          Yes        NaN       NaN
#5    In     No        NaN       2.0
#6    In    Yes        2.0       NaN

沒有for循環: - )

s=df.loc[df.Cause=='In'].Answer.str.get_dummies()
pd.concat([df,s.cumsum().mask(s!=1,'')],axis=1).fillna('')
Out[62]: 
  Answer Cause No Yes
0    Yes    In      1
1     No             
2  Maybe             
3     No    In  1    
4    Yes             
5     No    In  2    
6    Yes    In      2

暫無
暫無

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

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