我有以下 R“应用”语句:
for(i in 1:NROW(dataframe_stuff_that_needs_lookup_from_simulation))
{
matrix_of_sums[,i]<-
apply(simulation_results[,colnames(simulation_results) %in%
dataframe_stuff_that_needs_lookup_from_simulation[i,]],1,sum)
}
Run Code Online (Sandbox Code Playgroud)
所以,我有以下数据结构:
simulation_results:具有列名称的矩阵,用于标识 2000 个模拟(行)的每个可能的所需模拟查找数据。
dataframe_stuff_that_needs_lookup_from_simulation:除其他项外,还包含其值与simulation_results数据结构中的列名称匹配的字段。
matrix_of_sums:运行函数时,一个 2000 行 x 250,000 列(模拟数量 x 正在模拟的项目)结构用于保存模拟结果。
因此,apply 函数正在查找 250,000 个数据集中每行的数据帧列值,计算总和,并将其存储在matrix_of_sums 数据结构中。
不幸的是,这个处理需要很长时间。我已经探索了使用 rowsums 作为替代方案,它已将处理时间减少了一半,但我想尝试多核处理,看看这是否会进一步减少处理时间。有人可以帮我将上面的代码从“apply”转换为“lapply”吗?
谢谢!
我有一个创建如下的熊猫数据框:
df = pd.DataFrame({
'rank': ['1', '1', '1', '1', '2', '2'],
'name': ['bob', 'rick', 'bob', 'rick', 'randy', 'billy'],
'position': ['sanitation', 'washer', 'sanitation', 'washer', 'sanitation', 'washer']
})
Run Code Online (Sandbox Code Playgroud)
这会产生一个如下所示的数据框:

我希望能够操作数据框,使其最终看起来像这样:

本质上,一旦所有职位都用完,我希望重复的排名出现在新行上。
当我尝试这个时:
pivot = df.pivot_table(values='name', index='rank', columns='position')
Run Code Online (Sandbox Code Playgroud)
我收到错误“DataError:没有要聚合的数字类型”。
无论如何,我不确定这是否可行,因为我选择“排名”作为索引,而我真的不想对排名进行索引。一旦职位列表用完,我希望在新行中重复排名。
有任何想法吗?谢谢!