在Python中使用熊猫根据条件进行计数

时间:2019-03-19 20:06:00

标签: python pandas

我正在使用pandas,并且我想计算符合特定条件的行数,但是我希望进行不同级别的计数。我的意思是,我有一个看起来或多或少像这样的表(简化版,原始表有更多列):

Value   ID    Method 
 CR     01    Basic
 CD     03    Advanced
 PD     03    Advanced
 PD     02    Advanced
 CR     02    Basic

现在,我想按ID对事物进行分组,因为在新的Excel中,我将创建的每一列都将与之对应。因此,我想计算Method中有Basic行中有多少行,Advanced中有多少行,然后我要计算Basic中有多少行具有值{ {1}},CRCD。简单地说,最后,我将创建一个新的Excel工作表,如下所示:

PD

我简单地开始如下:

ID          01      02      03
Total       1       2       2
Basic       1       1       0
CR          1       1       0
CD          0       0       0
PD          0       0       0
Advanced    0       1       2
CR          0       0       0
CD          0       0       1
PD          0       1       1

因此,这将根据需要将所有内容按import pandas as pd df = pd.read_excel('./myfile.xlsx') method = ['Basic', 'Advanced'] value = ['CR', 'CD', 'PD'] grouped = df.groupby(['ID'], as_index=False) results = [] for _, g in grouped: values = [] for m in method: values.append(sum(g['Method'] == m)) results.append(values) 进行分组,然后按ID对每个分组条目的行进行计数,我想我还可以包括第三个循环并检查{{ 1}}列。但是,我想这在某些时候会变得有些麻烦,如果我以后再有4个等级,该怎么办?在Method中处理此问题的更好或推荐的方法是什么?

1 个答案:

答案 0 :(得分:1)

如我所说的使用TabPart[0].nom[20]="alami";

typedef struct
{
  char nom[20];
  char prenom[30];
  int dej;
  int din;
  int hot;
  int num;
}Participant;

Participant TabPart[10];
TabPart[0].nom[20]="alami";
TabPart[0].prenom[30]="iliass";
TabPart[0].dej=0;
TabPart[0].din=1;
TabPart[0].hot=2;
TabPart[0].num=1;