2024-04-23 11:49:41 发布
网友
我有一个csv,它有以下列
Date isAccepted
有许多重复的日期,isAccepted是一个带有0和1的布尔值列。我想计算一个特定日期0的计数。你知道吗
我正在尝试:
df['Count'] = df.groupby('Date').apply(lambda isAccepted: (isAccepted == 0).sum())
但是返回的列是NaN。谁能说出密码有什么问题吗。你知道吗
谢谢
如果需要用聚合值填充新列,请使用^{}:
df['Count'] = (df['isAccepted'] == 0).groupby(df['Date']).transform('sum')
使用带有^{}的新辅助列的类似解决方案:
df['Count'] = df.assign(new=df['isAccepted'] == 0).groupby('Date')['new'].transform('sum')
而且您的解决方案需要使用transform进行更改,但如果有许多组,则应该很慢:
transform
df['Count'] = df.groupby('Date')['isAccepted'].transform(lambda column: (column == 0).sum())
尝试下面的代码,希望能有所帮助
def countZero(df): count = 0 for accpt in df['isAccepted']: if accpt == 0 : count += 1 return count for date in set(df['Date'].tolist()): df['Count'][df['Date'] == date] = countZero(df.groupby('Date').get_group(date))
希望这会有帮助。你知道吗
问题是,当您使用groupby('Date')时,会创建一个新的DataFrame,其中的'Date'列现在作为索引,而不再是列,因此,当您的代码尝试将值赋给df['Count'](原始索引为0,1,2,3….n,没有'Dates')时,pandas找不到放置它的位置,因此它会用NAN填充['Count']列。要解决此问题,请尝试:
数据帧:
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()生成的新索引创建第二个数据帧:
df2=df.groupby('Date').sum()
现在您可以根据需要尝试您的代码,pandas将找到结果零和的位置,代码行的左项和第二项现在具有相同的索引:
df2['Count']=df.groupby('Date').apply(lambda column: (column == 0).sum())['isAccepted']
希望这能解决你的疑问,关于为什么南。你知道吗
如果需要用聚合值填充新列,请使用^{} :
使用带有^{} 的新辅助列的类似解决方案:
而且您的解决方案需要使用
transform
进行更改,但如果有许多组,则应该很慢:尝试下面的代码,希望能有所帮助
希望这会有帮助。你知道吗
问题是,当您使用groupby('Date')时,会创建一个新的DataFrame,其中的'Date'列现在作为索引,而不再是列,因此,当您的代码尝试将值赋给df['Count'](原始索引为0,1,2,3….n,没有'Dates')时,pandas找不到放置它的位置,因此它会用NAN填充['Count']列。要解决此问题,请尝试:
数据帧:
使用groupby()生成的新索引创建第二个数据帧:
现在您可以根据需要尝试您的代码,pandas将找到结果零和的位置,代码行的左项和第二项现在具有相同的索引:
希望这能解决你的疑问,关于为什么南。你知道吗
相关问题 更多 >
编程相关推荐