【发布时间】:2020-09-05 05:24:52
【问题描述】:
我有一个 pandas 数据框,其中一些数据存储在名为“col1”的列中。要计算最小值,我可以使用以下代码:
df = pd.DataFrame ([1,2,3,4,5,4,3,2,3,4,5,4,3,2,1,3,4,5,4,3,5,8,9], columns=["col1"] )
df['min'] = df.col1[(df.col1.shift(1) > df.col1) & (df.col1.shift(-1) > df.col1)]
如您所见,我只是将一个单元格与其周围的 2 个单元格进行比较,如果下一个单元格和上一个单元格更大,则意味着我有一个最小值,这就是我想要的。当我将它应用于“col1”时,这很好用,因为所有单元格都包含一个整数。
但是,如果我想重复将这段代码应用到 min 列的过程,我会收到错误消息。如果执行代码,您将在“min”列中看到只有三个具有值的单元格:2.0、1.0、3.0。
我想要的是将 1.0 与 2.0 和 3.0 进行比较,它们是上一个和下一个值,以查看 1.0 是全局最小值还是只是相对最小值。问题是我不知道如何跳转通过所有这些楠。
在这个数字示例中,预期的结果是一个新的列,除了一个包含绝对最小值的 1.0 数字的单元格之外,到处都用 Nan 填充,并且对应于 14 索引位置。这只是一个非常简单的示例,实际上我有一列包含数千个数字,因此我希望在第二次迭代中仍能获得许多最小值。
即使它们之间有Nan单元格,我仍然需要比较数据。
shift函数能做到吗?我有什么选择?
谢谢
【问题讨论】:
-
你可以添加一些数据样本,minimal, complete, and verifiable example 吗?
-
感谢 jezrael 的建议,我添加了一个数字示例和更多解释,希望现在更清楚
-
好多了。最后一件事,是否可以查看验证解决方案的预期输出?
标签: python pandas loops dataframe