总结了多索引熊猫数据帧

时间:2017-10-19 16:06:02

标签: python pandas dataframe

使用Sample,目标是:

  

计算cv::Mat in = cv::imread("c:/cropping/myImage.png"); cv::Mat _imgGray; cv::Mat edges; std::vector<cv::Point> nonBlackList; cv::cvtColor(in, _imgGray, CV_BGR2GRAY); cv::Canny(_imgGray, edges, 5, 50, 3); for(int j=0; j<edges.rows; ++j) for(int i=0; i<edges.cols; ++i) { // if not black: add to the list if(edges.at<cv::Vec3b>(j,i) != cv::Vec3b(0,0,0)) { nonBlackList.push_back(cv::Point(i,j)); } } 的每个值中的功能,换句话说,计算每个'A'标签中所有B值中变量的所有值中的内容。

A

output

目标

输出看起来像这样:

import numpy as np
import pandas as pd

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                              'foo', 'bar', 'foo', 'foo'],
                       'B' : ['one', 'one', 'two', 'three',
                              'two', 'two', 'one', 'three'],
                       'C' : np.random.randn(8),
                       'D' : np.random.randn(8)})

def var1(x): return max(x)-min(x)
def var2(x): return (max(x)-min(x))/max(x)
def var3(x): return (max(x)-min(x))/ len(x)

df = df.groupby(['A','B']).agg({'C': var1, 'D': [var2, var3]})

功能如:

A           var1        var2        var3        
bar         0.000000    -0.000000   0.000000
foo         1,008986    -0.8572265  0.3015905

1 个答案:

答案 0 :(得分:1)

IIUC:

In [8]: df
Out[8]:
                  C         D
               var1      var2      var3
A   B
bar one    0.000000  0.000000  0.000000
    three  0.000000 -0.000000  0.000000
    two    0.000000 -0.000000  0.000000
foo one    1.585287  0.663121  0.101220
    three  0.000000 -0.000000  0.000000
    two    0.799511 -0.074874  0.032681

In [9]: df.mean(level='A')
Out[9]:
            C         D
         var1      var2      var3
A
bar  0.000000  0.000000  0.000000
foo  0.794933  0.196082  0.044634

或使用自定义功能:

In [12]: def f(col):
    ...:     return np.mean(col) ** 2
    ...:

In [13]: df.groupby(level='A').apply(f)
Out[13]:
            C         D
         var1      var2      var3
A
bar  0.000000  0.000000  0.000000
foo  0.631918  0.038448  0.001992