我确实有去年的健康诊断数据,而且我确实希望获得每个月的诊断计数。这是我的数据:
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)
我如何获得每个月的诊断计数。例如,当月我们有多少细菌败血症的诊断。最终结果是一个表格,显示了每个月的诊断价值计数
答案 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
数据框以及要与之分组的列(diagnosis
和 outcome
):
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