使用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
输出看起来像这样:
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
答案 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