【问题标题】:Is there an Excel equivalent way to mimic pandas.DataFrame.iloc?是否有模仿 pandas.DataFrame.iloc 的 Excel 等效方法?
【发布时间】:2020-08-30 09:57:14
【问题描述】:

给定一个包含 30 行数据的 Excel 电子表格,如下所示:

|------|------------|
|  id  |    text    |
|------|------------|
|   1  |    apple   |
|   2  |    apple   |
|   3  |   banana   |
|   4  |    apple   |
|   5  |   orange   |
|  ... |    ...     |
|  30  |   orange   |
|------|------------|

我想知道是否有办法进行基于整数位置的索引。例如,如果我想返回从第 2 行开始的前 3 行,我会使用df.iloc[2:5]

expected output:
|------|------------|
|   2  |    apple   |
|   3  |   banana   |
|   4  |    apple   |
|------|------------|

我最终希望在 Excel 中指定 (1) 起始位置和 (2) 从起始位置返回的行数(例如,从 id=21 开始返回 10 行)。我尝试使用 INDEX 创建一个数组,但无法弄清楚。

【问题讨论】:

  • 检查间接函数。这就是你要找的东西
  • 你要excel函数吗?试试OFFSET

标签: python excel


【解决方案1】:

你需要两个函数:

MATCH 将在一个范围内找到一个值并返回它们的位置 INDIRECT 将允许您指定一个表示范围的字符串,并将返回该范围中包含的值。

MATCH function

INDIRECT function

做了一个这样的测试:

我在 K9 中的公式是:

=INDIRECT("A"&MATCH(L4;A:A;0)&":B"&(MATCH(L4;A:A;0)-1+L5))

这就是它的工作原理:

  1. MATCH(L4;A:A;0) 将在 A 列中找到 ID 位置。因为我说我是在整列中搜索,所以返回的值是 ID 所在的行号。所以如果我想找到 ID 2,它会返回3
  2. 我们将上一步中的数字与一个字符串结合起来,得到一个类似A3:B5 的字符串。 5 是从MATCH(L4;A:A;0)-1+L5) 获得的,在这里我得到我要查找的 ID 的行号,将要获取的行数相加,然后减去 1。
  3. INDIRECT("A3:B5") 是我想要的,它被退回了。

注意:根据您的 Excel 版本,INDIRECT 是否会自动扩展到相邻单元格。也许你必须手动拖动它

一个视频显示如果我想搜索不同的 id 或不同的行数,它会如何变化:

注意 2:如果没有找到 id,MATCH 会报错,公式将不起作用。

首先使用 COUNTIF 检查 ID 是否存在于 A 列中,如果为真,则执行 MATCH 和 INDIRECT。像这样的:

=IF(COUNTIF(A:A;L4)>0;INDIRECT("A"&MATCH(L4;A:A;0)&":B"&(MATCH(L4;A:A;0)-1+L5));"ID NOT FOUND")

如果返回的行数为 0 或更少,则相同。

【讨论】:

  • INDIRECT 是一个 volitile 函数,不应该(过度)使用,尤其是当有一个非 volitile 替代品时,例如在这种情况下 - INDEX
【解决方案2】:

根据您的 Excel 版本,有多种公式。

如果您有动态数组(如果我没记错的话是 Excel 2016+),您可以在单个单元格中输入以下内容。 如果您的 Excel 没有动态数组,则需要进行修改。

=INDEX(fruitTbl,Start,0):INDEX(fruitTbl,Count+Start-1,0)

我将数据范围转换为 Excel 表格,但如果您愿意,可以使用常规寻址。使用 Table 时,第一行数据将是 1,因为 Table 仅返回数据主体范围。

如果你没有动态数组试试

在某个单元格中输入:

=IFERROR(INDEX(INDEX(fruitTbl,Start,0):INDEX(fruitTbl,Count+Start-1,0),ROWS($1:1),COLUMNS($A:A)),"")
  • 然后向右拖动一列
  • 选择两个单元格并向下拖动至少直到您开始看到空白单元格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2016-02-06
    • 2017-11-09
    • 2010-12-11
    • 2019-09-12
    • 2017-10-23
    • 2011-03-20
    相关资源
    最近更新 更多