我有一个 Excel 表,其中显示了我的网站上各种产品全天的状态以及状态的时间戳,如下所示:
| Timestamp | Product 1 | Product 2 | Product 3 | Product 4 |
|-------------------------|-----------|-----------|-----------|-----------|
| 25/03/2021 08:15:52.020 | 999 | | 0 | 999 |
| 25/03/2021 08:15:53.000 | 0 | 101 | 0 | |
| 25/03/2021 08:15:53.070 | 0 | 0 | | 0 |
状态为 0 表示产品可用,而空白单元格/其他数字表示产品不可用。
对于每件产品,我希望获取该产品首次上市的时间戳(即单元格中的值首次为 0,而不是非 0 或空白)。最终结果如下:
| | Timestamp |
|-----------|-------------------------|
| Product 1 | 25/03/2021 08:15:53.000 |
| Product 2 | 25/03/2021 08:15:53.070 |
| Product 3 | 25/03/2021 08:15:52.020 |
| Product 4 | 25/03/2021 08:15:53.070 |
可以使用纯 Excel 函数来实现吗?还是我需要使用一些 Python/Pandas 来获取我想要的表格?谢谢!!
答案1
这可以使用INDEX/MATCH
假设您的数据在A1:E4
,对于产品 1,您将使用
=INDEX($A2:$A4,MATCH(0, B2:B4,0))
(其他产品也同样如此B2:B4
)C2:C4
答案2
扩展@cybernetic 的解决方案,第二张表中的公式可以查找应使用的列。因此 sheet2,B2 是(假设 Z 产品列和 100 行):
=INDEX(Sheet1!$A$2:$A$100, MATCH(0, INDEX(Sheet1!$B$2:$Z$100,,MATCH(A2, Sheet1!$B$1:$Z$1,0)),0))
分解一下,右边第一个 MATCH 查找产品名称并返回列索引 1 到 25(相对于 B - Z)。右边第一个 INDEX 返回包含当前产品状态信息的列向量。第二个 MATCH 查找此列向量中第一次出现的零并返回行索引。第二个 INDEX 使用这个最终索引来挑选该行的时间戳。
编辑:更好的是,假设工作表 1 和工作表 2 中列出的产品的顺序保持不变,您不必搜索(匹配),而可以简单地使用工作表 2 中产品的行号作为工作表 1 中的列索引...
=INDEX(Sheet1!$A$2:$A$100, MATCH(0, INDEX(Sheet1!$B$2:$Z$100,,ROW()-2+1),0))
其中 ROW()-2+1 给出从第 2 行开始的索引 1、2、3、4...。