当前位置: 首页 > 知识库问答 >
问题:

熊猫发现局部最大和最小值,而不是高原值

堵飞鸿
2023-03-14

我需要在熊猫数据帧中找到本地最大值和最小值,起初看起来这和熊猫找到本地最大值和最小值是一样的问题,但建议的解决方案似乎都不正确。

In[876]: import pandas as pd
    ...: 
    ...: df = pd.DataFrame({'data': [1, 1, 2, 2, 1, 0, 0, -2, 0]})
    ...: 
    ...: # Test 1, missing max in df.iloc[3], min correct
    ...: df['min'] = df.data[(df.data.shift(1) > df.data) & (df.data.shift(-1) > df.data)]
    ...: df['max'] = df.data[(df.data.shift(1) < df.data) & (df.data.shift(-1) < df.data)]
    ...: 
In[877]: df
Out[877]: 
   data  min  max
0     1  NaN  NaN
1     1  NaN  NaN
2     2  NaN  NaN
3     2  NaN  NaN
4     1  NaN  NaN
5     0  NaN  NaN
6     0  NaN  NaN
7    -2 -2.0  NaN
8     0  NaN  NaN
In[878]: 
In[878]: # Test 2, max incorrect, min incorrect
    ...: # max in iloc = 3, 6
    ...: # min in iloc = 1, 7
    ...: df['min'] = df.data[(df.data.shift(1) >= df.data) & (df.data.shift(-1) > df.data)]
    ...: df['max'] = df.data[(df.data.shift(1) <= df.data) & (df.data.shift(-1) < df.data)]
    ...: 
In[879]: df
Out[879]: 
   data  min  max
0     1  NaN  NaN
1     1  1.0  NaN
2     2  NaN  NaN
3     2  NaN  2.0
4     1  NaN  NaN
5     0  NaN  NaN
6     0  NaN  0.0
7    -2 -2.0  NaN
8     0  NaN  NaN

我想确定局部最小值和最大值,而不是平台值。正确的标识是:

  • iloc 2或3中的最大值(无所谓)
  • iloc 7中的最小值

一个解决方案是开始写循环和如果/其他,但它变得越来越丑陋...我猜可能有更简单的解决方案,使用熊猫,我缺乏一些知识,任何帮助都将不胜感激。

我对Python和Stack Overflow都是新手,所以我希望你能原谅任何新手的错误,干杯。

共有1个答案

邵博远
2023-03-14

IIUC,您想在唯一的连续值上应用本地最大值和最小值,所以执行以下操作:

import pandas as pd

df = pd.DataFrame({'data': [1, 1, 2, 2, 1, 0, 0, -2, 0]})

# remove consecutive duplicates
res = df[df['data'] != df['data'].shift()]

# find min and max
res['min'] = res.data[(res.data.shift(1) > res.data) & (res.data.shift(-1) > res.data)]
res['max'] = res.data[(res.data.shift(1) < res.data) & (res.data.shift(-1) < res.data)]

# put back in original df
output = pd.concat((df, res[['min', 'max']]), axis=1)
print(output)

输出

   data  min  max
0     1  NaN  NaN
1     1  NaN  NaN
2     2  NaN  2.0
3     2  NaN  NaN
4     1  NaN  NaN
5     0  NaN  NaN
6     0  NaN  NaN
7    -2 -2.0  NaN
8     0  NaN  NaN
 类似资料:
  • 我有一个熊猫数据框,有两列,一列是温度,另一列是时间。 我想做第三和第四列,叫做最小和最大。这些列中的每一个都将填充nan's,除非有一个局部min或max,那么它将具有该极值的值。 这里是一个数据的样本,本质上我试图识别图中所有的峰值和低点。 有没有内置的熊猫工具可以做到这一点?

  • 问题内容: 我有一个数据框,看起来像: 我希望按年份分组,然后总结sum_col。此外,我需要查找一周的最早日期和最新日期。第一部分很简单: 我试图用这个来找到最小/最大日期,但是没有成功: 如何找到最早/最新出现的日期? 问题答案: 您需要组合适用于同一列的函数,如下所示:

  • 问题内容: 我有一个包含屏幕名称,tweet,收藏夹等的Pandas DataFrame。我想找到“ favcount”(我已经做过)的最大值,并返回该“ tweet”的屏幕名称 我似乎找不到任何东西,任何人都可以帮助我朝正确的方向发展吗? 问题答案: 使用 来获取最大价值的指标。那你可以用 编辑: 现已弃用,切换为

  • 问题内容: 创建一个将根据年份重置的序列。考虑以9位数开头000000001且最大为999999999的序列。 假设Date为30/12/2017,seq为000012849,所以当日期为01/01/2018时,我希望seq为000000001。 问题答案: 创建一个定期计划作业,该作业在每年的1月1日午夜重新设置顺序。 类似于(假设您有执行重置的过程):

  • 假设这条线是由熊猫的离散随机数组成的。我怎样才能找到A、B、C、D点? A是第一点和C之间的最高点 C是A和B之间的最低点 B是C和D之间的最高点 您可以使用这些数据来测试:[1, 2, 3, 10, 13, 15, 20, 50, 49, 49, 32, 33, 35, 36, 35, 34, 33, 34, 35, 36, 30, 27, 22, 15, 15, 17, 20, 27, 30,

  • 问题内容: 我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有和。python中是否有类似的东西? 问题答案: Python 3 在Python 3中,此问题不适用。普通int类型是无界的。 但是,你实际上可能正在寻找有关当前解释器的字长的信息,在大多数情况下,该信息将与机器的字长相同。该信息在Python 3中仍以形式提供,这是一个有符号的单词可以表示的最大值。等效地,它是