每月数据汇总

时间:2021-05-24 13:51:01

标签: python pandas

我确实有去年的健康诊断数据,而且我确实希望获得每个月的诊断计数。这是我的数据:

import pandas as pd

cars2 = {'ID': [22,100,47,35,60],
    'Date': ['2020-04-11','2021-04-12','2020-05-13','2020-05-14', '2020-06-15'],
        'diagnosis': ['bacteria sepsis','bacteria sepsis','Sepsis','Risk sepsis','Neonatal sepsis'],
        'outcome': ['alive','alive','dead','alive','dead']
        
        }

df2 = pd.DataFrame(cars2, columns = ['ID','Date', 'diagnosis', 'outcome'])

print (df2)

我如何获得每个月的诊断计数。例如,当月我们有多少细菌败血症的诊断。最终结果是一个表格,显示了每个月的诊断价值计数

4 个答案:

答案 0 :(得分:2)

如果您想查看每月的结果,可以使用 pivot_table

df2.pivot_table(index=['outcome','diagnosis'], columns=pd.to_datetime(df2['Date']).dt.month, aggfunc='size', fill_value=0)

Date                     4  5  6
outcome diagnosis               
alive   Risk sepsis      0  1  0
        bacteria sepsis  2  0  0
dead    Neonatal sepsis  0  0  1
        Sepsis           0  1  0

4,5,6 是数据集中的月份。

尝试调整此处的参数,您可能会获得更适合您理想结果的更好视图。

答案 1 :(得分:1)

首先需要通过to_datetime()函数创建一个month变量;然后您可以按月份分组并在月份内制作value_counts()

import pandas as pd

df2['month'] = pd.to_datetime(df2['Date']).dt.month
df2.groupby('month').apply(lambda x: x['diagnosis'].value_counts())

month                 
4      bacteria sepsis    2
5      Risk sepsis        1
       Sepsis             1
6      Neonatal sepsis    1
Name: diagnosis, dtype: int64

答案 2 :(得分:1)

我通过将 Date 列设置为索引来修改您的数据框:

import pandas as pd

cars2 = {'ID': [22,100,47,35,60],
    'Date': ['2020-04-11','2021-04-12','2020-05-13','2020-05-14', '2020-06-15'],
        'diagnosis': ['bacteria sepsis','bacteria sepsis','Sepsis','Risk sepsis','Neonatal sepsis'],
        'outcome': ['alive','alive','dead','alive','dead']
        }

df2 = pd.DataFrame(cars2, columns = ['ID','Date', 'diagnosis', 'outcome'])
df2.index = pd.to_datetime(df2['Date']) # <--- I set your Date column as the index (also convert it to datetime)
df2.drop('Date',inplace=True, axis=1) # <--- Drop the Date column
print (df2)

如果您通过 pd.Grouper groupby 数据框以及要与之分组的列(diagnosisoutcome):

df2.groupby([pd.Grouper(freq='M'), 'diagnosis','outcome']).count()

输出:

                                    ID
Date       diagnosis       outcome    
2020-04-30 bacteria sepsis alive     1
2020-05-31 Risk sepsis     alive     1
           Sepsis          dead      1
2020-06-30 Neonatal sepsis dead      1
2021-04-30 bacteria sepsis alive     1

注意:freq='M' 中的 pd.Grouper 按月对数据框进行分组。阅读有关 freq 属性 here

的更多信息

编辑:将分组数据帧分配给 new_df 并重置除 Date 之外的其他索引:

new_df = df2.groupby([pd.Grouper(freq='M'), 'diagnosis','outcome']).count()
new_df.reset_index(level=[1,2],inplace=True)

每个月迭代并在 df_list 中单独获取表:

df_list = [] # <--- this will contain each separate table for each month
for month in np.unique(new_df.index):
    df_list += [pd.DataFrame(new_df.loc[[month]])]
df_list[0] # <-- get the first dataframe in df_list

将返回:

                  diagnosis outcome  ID
Date                                   
2020-04-30  bacteria sepsis   alive   1

答案 3 :(得分:1)

我认为你所说的每个月不仅仅是指数字,而是年月强>组合。因此,让我们按以下方式处理:

首先,我们根据 https://youtu.be/GRtgLlwxpc4 列创建一个“年-月”列。然后在这个新的 1.MoveNext() at System.DirectoryServices.AccountManagement.FindResultEnumerator 列上使用 .groupby() 并在 int num1 = 0; int num2 = 0; DateTime now1 = DateTime.Now; PrincipalContext AD = new PrincipalContext(ContextType.Domain, "ourdomain.org"); UserPrincipal userPrincipal = new UserPrincipal(AD); PrincipalSearcher search = new PrincipalSearcher(userPrincipal); var all = search.FindAll(); int userCount = 0; foreach (UserPrincipal result in all) { // some code } 列上得到 .value_counts(),如下所示:

Date

结果:

year-month