我正在寻找一种pythonic方式来处理以下问题.
The pandas.get_dummies() method is great to create dummies from a categorical column of a dataframe. For example, if the column has values in ['A', 'B'], get_dummies() creates 2 dummy variables and assigns 0 or 1 accordingly.
Now, I need to handle this situation. A single column, let's call it 'label', has values like ['A', 'B', 'C', 'D', 'A*C', 'C*D'] . get_dummies() creates 6 dummies, but I only want 4 of them, so that a row could have multiple …
假设我们从这个简单的表开始,存储在pandas数据帧中:
name age family
0 john 1 1
1 jason 36 1
2 jane 32 1
3 jack 26 2
4 james 30 2
Run Code Online (Sandbox Code Playgroud)
然后我做
group_df = df.groupby('family')
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean})
Run Code Online (Sandbox Code Playgroud)
其中groupby()是名称的简单聚合函数:
def name_join(list_names, concat='-'):
return concat.join(list_names)
Run Code Online (Sandbox Code Playgroud)
输出是:
age name
family
1 23 john-jason-jane
2 28 jack-james
Run Code Online (Sandbox Code Playgroud)
现在的问题.
是否有快速,有效的方法从聚合表中获取以下内容?
name age family
0 john 23 1
1 jason 23 1
2 jane 23 1
3 jack 28 2
4 james 28 2
Run Code Online (Sandbox Code Playgroud)
(注意:数字只是示例,我不关心在此具体示例中取平均值后丢失的信息)
我认为我能做到的方式看起来效率不高:
我正在尝试获得pmvnorm的Rcpp版本以至少与R中的mvtnorm :: pmvnorm一样快地工作。
我已经找到https://github.com/zhanxw/libMvtnorm并使用相关的源文件创建了一个Rcpp框架包。我添加了以下使用Armadillo的函数(因为我正在我编写的其他代码中使用它)。
//[[Rcpp::export]]
arma::vec triangl(const arma::mat& X){
arma::mat LL = arma::trimatl(X, -1); // omit the main diagonal
return LL.elem(arma::find(LL != 0));
}
//[[Rcpp::export]]
double pmvnorm_cpp(arma::vec& bound, arma::vec& lowtrivec){
double error;
int n = bound.n_elem;
double* boundptr = bound.memptr();
double* lowtrivecptr = lowtrivec.memptr();
double result = pmvnorm_P(n, boundptr, lowtrivecptr, &error);
return result;
}
Run Code Online (Sandbox Code Playgroud)
从R构建程序包之后,这是一个可复制的示例:
set.seed(1)
covar <- rWishart(1, 10, diag(5))[,,1]
sds <- diag(covar) ^-.5
corrmat <- diag(sds) %*% covar %*% diag(sds)
triang <- triangl(corrmat)
bounds <- c(0.5, …Run Code Online (Sandbox Code Playgroud) 我有一个函数,要将Eigen::MatrixXd对象转换为arma::mat。
我知道这个问题,但似乎无法纠正我得到的行为。matrixxd_to_armamat从R 调用不会造成任何问题,问题是当我在C中的另一个函数中进行此转换时。这有点令人困惑,我想了解发生了什么。
#include <RcppArmadillo.h>
#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::depends(RcppArmadillo)]]
using namespace std;
arma::mat matrixxd_to_armamat(Eigen::MatrixXd eigen_A) {
arma::mat arma_B = arma::mat(eigen_A.data(), eigen_A.rows(), eigen_A.cols(),
false, false);
return arma_B;
}
arma::mat matrixxd_to_armamat2(Eigen::MatrixXd& eigen_A) {
arma::mat arma_B = arma::mat(eigen_A.data(), eigen_A.rows(), eigen_A.cols(),
false, false);
return arma_B;
}
//[[Rcpp::export]]
arma::mat tester(){
Eigen::MatrixXd A_eigen(2,2);
A_eigen(0,0) = 1.0;
A_eigen(1,0) = 2.0;
A_eigen(0,1) = -1.0;
A_eigen(1,1) = -2.0;
Rcpp::Rcout << A_eigen << endl;
arma::mat A_arma = matrixxd_to_armamat(A_eigen);
arma::mat A_arma2 …Run Code Online (Sandbox Code Playgroud)