Python:汇总和聚合DataFrame中的组和子组

时间:2019-04-13 08:07:26

标签: python pandas numpy group-by aggregate

我正在尝试建立一个表,该表具有按子组划分的组,每个子组具有计数和平均值。例如,我要转换以下数据帧:

到这样一个表中,其中 interval 是一个较大的组,而 a thru i 列成为该组中的子组,相应子组的计数和平均值每个单元格:

我尝试了这个但没有成功:

3 个答案:

答案 0 :(得分:2)

尝试。

#include <stdlib.h>
#include <stdio.h>

struct Node{
int Element;
struct Node *Next;
};
typedef struct Node *PtrToNode;

void PrintList( PtrToNode L ) {
PtrToNode P = L->Next;
printf("head -> ");

while( P != NULL ) {
printf("%d -> ", P->Element);
P = P->Next;
}
printf("NULL\n");
}

void Insert( int X, PtrToNode P ){
PtrToNode TmpCell = malloc( sizeof( struct Node ) );
TmpCell->Element = X;
TmpCell->Next = P->Next;
P->Next = TmpCell;
}

PtrToNode CreateList(int a[], int n){
int i;
PtrToNode header = malloc( sizeof( struct Node ) );
PtrToNode P= header;
header->Element = -1;
header->Next = NULL;

for(i=0; i<n; i++){
Insert(a[i], P);
P = P->Next;
}

return header;
}

void ReverseList( PtrToNode L1);

void main(){
int data1[]={3,18,7,21,4,14,10,8,12,17};

PtrToNode list = CreateList(data1, 10);

printf("original list: ");PrintList(list);
ReverseList(list);

printf("revsered list: ");PrintList(list);
}


void ReverseList( PtrToNode L1){
int i;
int array[10];

for(i=9; L1->Next != NULL; i--){
L1=L1->Next;
array[i]=L1->Element;
}

L1 = CreateList(array, 10);
printf("revsered list: ");PrintList(L1);

}

df.groupby(['interval']).apply(lambda x : x.stack() .groupby(level=-1) .agg({'count', 'mean'})) groupby一起用于每个组,然后applystack再与groupby一起使用,以找到agg和{ {1}}。

答案 1 :(得分:0)

DataFrame.meltGroupBy.agg和元组一起使用具有新列名称的聚合函数:

df1 = (df.melt('interval', var_name='source')
         .groupby(['interval','source'])['value']
         .agg([('cnt','count'), ('average','mean')])
         .reset_index())
print (df1.head())
  interval source  cnt  average
0        0      a    1      5.0
1        0      b    1      0.0
2        0      c    1      0.0
3        0      d    1      0.0
4        0      f    1      0.0

答案 2 :(得分:0)

以下代码解决了我所要求的问题:

.download {
    text-align: center;
    border-style: solid;
    border-radius: 20px;
    display: inline-block;
    height: 250px;
    width: 200px;
  }
  
  .button {
    text-decoration: none;
    color: white;
    background-color: black;
    padding: 12px 20px;
    border-radius: 20px;
  }
  .container{
      
    width: 424px;
    height: 540;
    margin: 0 auto;
  }