在Python中使用验证对数据帧进行分组和计数

在Python中使用验证对数据帧进行分组和计数,python,pandas,dataframe,group-by,count,Python,Pandas,Dataframe,Group By,Count,我目前正在进行以下分析: Year Gender No. People 18 Men 11 Woman 8 Not Applied 3 19 Men 14 Woman 5 Not Applied 0 1。我需要计算2018年和2019年“人数”每年是否有4个条目。应排除相同的日期(不包括 不管是哪一个) 它应该如下所示: Year

我目前正在进行以下分析:

Year    Gender  No. People 
18      Men         11
        Woman        8
        Not Applied  3
19      Men         14
        Woman        5
        Not Applied  0
1。我需要计算2018年和2019年“人数”每年是否有4个条目。应排除相同的日期(不包括 不管是哪一个)

它应该如下所示:

Year    Gender  No. People 
18      Men         11
        Woman        8
        Not Applied  3
19      Men         14
        Woman        5
        Not Applied  0
“人数”列显示人数

2。按性别检查10天内的最后10个月是否有6个以上的“No.People”条目存在。

结果可能如下所示:

Period                   Gender      Entries
01/23/2019 - 01/15/2019  Men         6
N/A                      Woman       N/A
N/A                      Not Applied N/A
3。检查过去3个月是否有11项针对人数的措施

Period                   Gender      Entries
12/20/2018 - 01/23/2019  Men         26
12/20/2018 - 01/23/2019  Woman       13
12/20/2018 - 12/26/2018  Not Applied N/A
不知何故,它看起来很复杂,这就是为什么我要与代码斗争

我开始使用以下代码:

import pandas as pd
path = 'path'
filename = 'excel.xls'
final_path = path + '/' + filename
ws_name = 'Sheet1'

df.groupby(df['Date'].dt.year)['No. People'].agg(['count']) 
但我对结果或错误感到困惑

Excel中的数据如下所示:

Date    Gender  No. People
12/20/18    Men 4
12/21/18    Men 9
12/22/18    Men 3
12/23/18    Men 9
12/24/18    Men 6
12/25/18    Men 1
12/26/18    Men 3
12/27/18    Men 8
12/28/18    Men 3
12/29/18    Men 5
12/30/18    Men 8
12/31/18    Men 
01/01/19    Men 
01/02/19    Men 
01/03/19    Men 
01/04/19    Men 9
01/05/19    Men 7
01/06/19    Men 5
01/07/19    Men 1
01/08/19    Men 8
01/09/19    Men 5
01/10/19    Men 6
01/11/19    Men 9
01/12/19    Men 7
01/13/19    Men 
01/14/19    Men 
01/15/19    Men 
01/16/19    Men 
01/17/19    Men 
01/18/19    Men 
01/19/19    Men 6
01/20/19    Men 5
01/21/19    Men 2
01/22/19    Men 5
01/23/19    Men 1
12/20/18    Women   6
12/21/18    Women   6
12/22/18    Women   2
12/23/18    Women   2
12/24/18    Women   2
12/25/18    Women   
12/26/18    Women   
12/27/18    Women   
12/28/18    Women   1
12/29/18    Women   1
12/30/18    Women   4
12/31/18    Women   
01/01/19    Women   
01/02/19    Women   
01/03/19    Women   
01/04/19    Women   
01/05/19    Women   
01/06/19    Women   
01/07/19    Women   
01/08/19    Women   
01/09/19    Women   
01/10/19    Women   
01/11/19    Women   
01/12/19    Women   
01/13/19    Women   
01/14/19    Women   
01/15/19    Women   
01/16/19    Women   
01/17/19    Women   
01/18/19    Women   
01/19/19    Women   4
01/20/19    Women   6
01/21/19    Women   8
01/22/19    Women   9
01/23/19    Women   4
12/20/18    Not Applied 6
12/21/18    Not Applied 2
12/22/18    Not Applied 3
12/23/18    Not Applied 
12/24/18    Not Applied 
12/25/18    Not Applied 
12/26/18    Not Applied 

首先,只需添加按性别分组也很好

df['Date'] = pd.to_datetime(df['Date'])
df.groupby([df['Date'].dt.year, 'Gender'])['No. People'].agg(['count'])
第二种方法是按10天的周期对其进行分组,您可以使用pandas Grouper类

df.sort_values(by=['Date'], ascending=False, inplace=True)
from_date = df.iloc[0]['Date'] - pd.DateOffset(months=10)
last_10_months = df[df.Date >= from_date]
count_people = last_10_months.groupby([pd.Grouper(key='Date', freq='10D'), 'Gender']).count()
count_people[count_people['No. People'] > 6]
第三个月也一样

df.sort_values(by=['Date'], ascending=False, inplace=True)
from_date = df.iloc[0]['Date'] - pd.DateOffset(months=3)
last_3_months = df[df.Date >= from_date]
df.groupby(['Gender']).count()
count_people[count_people['No. People'] > 11]

你能举例说明你试过什么代码吗?您添加的一个不完整,例如您正在调用的RPO列是什么?你犯了什么错误?你被困在哪里了?@effy对不起我的错误。我更正了代码,非常感谢!还有两个问题。对于第二个,是否可以执行10个月的分组(如10个月),并按照您的定义显示结果?第三组是三个月一组?你是说10个月一组,然后10天一组?试试
df.groupby([pd.Grouper(key='Date',freq='10M'),pd.Grouper(key='Date',freq='10D'),'Gender'])。count()
这就是我要找的。我只想问更多的问题。我可以限制df.groupby([pd.Grouper(key='Date',freq='10M'),pd.Grouper(key='Date',freq='10D'),'Gender'])的
count()
我真的只需要查看最后的10M吗?我的意思是说2019年1月1日减去10个月,我只会研究到1月1日的这段时间。2018年马尔兹,不再进一步。这是可能的吗?是的,例如,在排序以获取最后一个日期之后:
df.sort\u值(by=['date'],升序=False)from\u date=df.iloc[0]['date']-pd.DateOffset(months=10)df[df.date>from\u date]
谢谢,我的意思是,在10天的alst 10M中,我应该有6个以上的人数条目