问题标签 [split-apply-combine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
33 浏览

r - 基于变量对列进行操作

我有以下数据

我需要取m2015 年和 2016 年对应值的差异,以显示 2015 年到 2016 年分配的成绩比例的差异。我想我可以reshape2::cast这样做并ddplyr::summarise计算差异,但我不确定如何首先使用cast

0 投票
1 回答
225 浏览

python - Pandas 使用过滤运行小计 - 应用和 Lambda?

我正在尝试构建一些东西,对于熊猫数据库中的每条记录,将显示给定列的总数,并显示给定列中在该记录日期之前发生的某些记录的总数。

请注意,比较应该是当前记录的 STARTDATE 与所有记录的 ENDDATE 相比(仅计算在当前期间之前结束的期间的利润)

我需要澄清这一点,因为 Diego Amicabile 在下面提出了一个非常漂亮的答案,不幸的是并没有让我到达我需要的地方(我最初发布的问题只有一个报告日期字段)

在此处输入图像描述

所以在这个数据框中,我希望最后有两列。总利润(或 sumall)和公司利润(或 sumco)

Sumall,第一条记录为 0,第二条记录为 -500(2017-01-01 之前的所有日期)第三条记录为 300(-500+800)等

Sumco 将是 0 ,直到我们获得第二条 IBM 记录,即 -500 。它在第三条 IBM 记录上保持 -500,因为第二条记录 (2017-03-03) 的结束时间在第三条记录的开始时间之后。

它应该如下所示:

在此处输入图像描述 代码如下..我做错了什么,但无法弄清楚它是什么

错误如下:

0 投票
3 回答
2750 浏览

r - 如何使用 dplyr 计算嵌套 data_frames 中的行数

这是一个愚蠢的示例数据框:

看起来像这样:

我想添加第三列N,其条目等于data. 我认为这会起作用:

怎么了?

0 投票
3 回答
86 浏览

python - 获取每个列值的最常见列

我想要每个数字最常见的字母。我尝试了各种各样的东西;不知道什么是正确的方法。

理想情况下,我希望最大限度地提高可读性。

0 投票
1 回答
399 浏览

r - JMP 拆分表的 tidyr 或 dplyr 等效项

JMP 有一个“分表”平台:
http ://www.jmp.com/support/help/Split_Columns.shtml

这是它的图像:

在此处输入图像描述

“拆分依据”成为列标题的一部分。
“拆分列”是展开的列。
“组”是保留的列。

我查看了一些链接/页面,但似乎无法在 R 中正确理解这一点。现在我必须将它整合到 JMP 中的宏中。

对我没有帮助的链接包括:

我需要将约 20k 行和约 30 列的表沿其中一列(0 到 13 之间的整数)拆分为约 1400 行,其中约 25 行拆分为 350。

一个不优雅但可重复的示例是拆分此汽车
在此处输入图像描述

根据这个:
在此处输入图像描述

产生这个:
在此处输入图像描述

如何使用 tidyr 或 dplyr 等 R 库来执行此操作并保留 ~5 个非拆分列?

0 投票
2 回答
926 浏览

python - 用 Pandas GroupBy 找出每组的一半

我需要使用 选择数据框的一半groupby,其中每个组的大小是未知的,并且可能因组而异。例如:

组的大小分别groupyby('participant_id')为10、7、9 和participant_id13、14、15。我需要的是只取每组的前一半(或地板(N/2))。

根据我对 Pandas 的(非常有限的)经验groupby,它应该是这样的:

其中k_i是每组大小的一半。是否有一个简单的解决方案来找到k_i

0 投票
2 回答
7731 浏览

python - 如何使用 pandas groupby() 的 split-apply-combine 模式同时规范化多个列

我正在尝试规范化 pandas 数据表中的实验数据,该表包含具有数字可观察值(特征)的多列、具有日期和实验条件的列以及其他非数字条件(例如文件名)。

我想

  • 使用拆分-应用-组合范式
  • 使用子组的聚合统计数据在组内标准化
  • 使用不同的归一化(例如除以控制均值、Z 分数)
  • 将此应用于所有数值列(可观察值)
  • 最后,生成一个增强数据表,它与原始数据表具有相同的结构,但有额外的列,例如对于 Observable1 列,应该添加一个列 normalized_Observable1

可以使用以下代码片段生成具有此结构的简化数据表:

看起来像这样

现在,对于每个实验日期,我都有不同的实验条件,但我总是有名为ctrl. 我想要执行的标准化之一是计算(对于每个数字列)该日期的对照实验的平均值,然后将该日期的所有可观察值除以它们相应的平均值。

我可以使用以下方法快速计算一些按日期、按条件汇总的统计信息:

然后我想将这些汇总统计数据应用于每个实验日期的标准化:

并以如下方式应用规范化:

最后一步只是伪代码。这就是我正在努力解决的问题。我可以使用嵌套的 for 循环对数字列的日期、条件和列名进行规范化,但我是 split-apply-combine 范式的新手,我认为必须有一个简单的解决方案?非常感谢任何帮助。

0 投票
1 回答
756 浏览

python - 用组的中值替换数据框值

抱歉,如果这是重复,我没有找到类似的答案。

大图:我有一个带有 NaN 值的 df,我想用该列的估算中值替换它。但是,我发现 sklearn 中的内置输入器使用整个列的中值(或任何度量)。我的数据有标签,我想用仅属于该标签的其他样本中的该列的中值替换每个 NaN 值。

我可以通过将 df 拆分为每个标签的一个 df,对每个 df 进行插补,然后组合来做到这一点,但是这种逻辑不能很好地扩展。我最多可以上 20 节课,但我根本不相信这是“正确”的做法。

我想在不复制我的 df 的情况下执行此操作,方法是在拆分-应用-组合技术(或您认为可行的其他技术)中使用 groupby 对象。我感谢您的帮助。

示例 df:

在这里,我希望 (0, r2) 处的 NaN 值等于标签 0 的该列的中值,即值 89(来自 3, r2)。

我希望 (2,r3) 处的 NaN 值等于标签 1 的该列的中值,即中值 (24, 12) 或 18。

成功结果示例:

0 投票
2 回答
670 浏览

python - Python Pandas 在 DataFrame 中聚合系列数据

在数据框中,我正在尝试拆分应用组合到包含系列数据元素的列。(我已经搜索过,但没有找到与数据框中的系列有关的任何内容。)

数据框:

然后我分组和聚合,就像这样。

这给了我

但我想要的是

我可能遗漏了一些明显的东西,但解决方案让我无法理解。

0 投票
2 回答
317 浏览

python - Building complex subsets in Pandas DataFrame

I'm making my way around GroupBy, but I still need some help. Let's say that I've a DataFrame with columns Group, giving objects group number, some parameter R and spherical coordinates RA and Dec. Here is a mock DataFrame:

I want to built a selection containing for each group the "brightest" object, i.e. the one with the smallest R (or the greatest absolute value, since Ris negative) and the 3 closest objects of the group (so I keep 4 objects in each group - we can assume that there is no group smaller than 4 objects if needed).

We assume here that we have defined the following functions:

and that separation between two objects is given by r2d(calc_sep(RA1,Dec1,RA2,Dec2)), with RA1 as RA for the first object, and so on.

I can't figure out how to use GroupBy to achieve this...