计算特定列中的0数

时间:2019-09-06 03:53:01

标签: python pandas

我有一个csv,其中包含以下列

Date    isAccepted

有很多重复的日期,isAccepted是一个布尔值列,包含0和1。我想计算特定日期的0计数。

我正在尝试:

df['Count'] = df.groupby('Date').apply(lambda isAccepted: (isAccepted == 0).sum())

但是返回的列是NaN。谁能告诉我代码有什么问题。

谢谢

3 个答案:

答案 0 :(得分:0)

尝试以下代码,希望对您有所帮助

Last-Modified

希望这会有所帮助。

答案 1 :(得分:0)

问题是,当您使用groupby('Date')时,会创建一个新的DataFrame,现在将'Date'列作为索引,而不再是列,因此,当您的代码尝试将值分配给df ['Count '](原始索引为0、1、2、3 .... n的数据框,没有“日期”),大熊猫找不到放置它的位置,因此它用NAN填充['Count']列。要解决此问题,请尝试:

DataFrame:

data={'Date':['04/09/2019','04/09/2019','04/09/2019','04/09/2019','04/09/2019','04/09/2019','04/09/2019','04/09/2019',
 '05/09/2019','05/09/2019','05/09/2019','05/09/2019','05/09/2019','05/09/2019','06/09/2019','06/09/2019',
 '06/09/2019','06/09/2019','06/09/2019','06/09/2019','06/09/2019'],
      'isAccepted':[0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0]}      
df=pd.DataFrame(data,columns=['Date','isAccepted'])

使用groupby()生成的新索引创建第二个DataFrame:

df2=df.groupby('Date').sum()

现在,您可以根据需要尝试使用代码,熊猫将找到将所得的零和放在哪里,代码行的左边和第二项现在具有相同的索引:

df2['Count']=df.groupby('Date').apply(lambda column: (column == 0).sum())['isAccepted']

希望这可以解决您对为什么使用NAN的疑问。

答案 2 :(得分:0)

如果需要用汇总值填充新列,请使用GroupBy.transform

df['Count'] = (df['isAccepted'] == 0).groupby(df['Date']).transform('sum')

带有DataFrame.assign的新帮助程序列的类似解决方案:

df['Count'] = df.assign(new=df['isAccepted'] == 0).groupby('Date')['new'].transform('sum')

您的解决方案是必须用transform进行更改的,但是如果有多个组,它应该很慢:

df['Count'] = df.groupby('Date')['isAccepted'].transform(lambda column: (column == 0).sum())