我得到了这一系列带有索引的数据点;因此,dataframe看起来如下所示:
index value
0 3.075
1 44.338
2 10.030然后,我编写了一个函数get_extrema,它查找所有的局部极值,并返回一个包含3列的数据格式:index、value、type。
索引=原始给定数据集中极值的索引 value =发现的局部极值的值 类型= 'max‘或'min’
然后,利用get_extrema的结果,我编写了另一个函数,它查找极值对的振幅(也就是局部最小值和局部最大值之间的差值).我只想返回最大振幅的顶级对:
def get_amplitude(extremas, col, n):
amps = abs(extremas[col].diff(periods=1))
amps.sort_values(inplace=True, ascending=False)
amps = amps.head(n)
df = pd.DataFrame({'local minima': extremas.loc[amps.index, 'value'],
'local maxima': extremas.loc[amps.index - 1, 'value']})
return dfExtremas是get_extremas输出的数据,col是包含上述数据中极值的列的名称,n是在本地min/max对之间差异最大的顶部n对的数目。
它工作正常,但答案输出有点奇怪:
+-------------------------------------+
| | local maxima | local minima |
+-------+--------------+--------------+
| 17398 | 433.75 | NaN |
| 17399 | NaN | -99.00 |
| 17551 | 438.00 | NaN |
| 17552 | NaN | -88.25 |
| 21262 | 437.75 | NaN |
| 21263 | NaN | -120.75 |
+-------+--------------+--------------+我想要的输出:
+-------------------------------------+
| | local maxima | local minima |
+-------+--------------+--------------+
| 0 | 433.75 | -99.00 |
| 1 | 438.00 | -88.25 |
| 2 | 437.75 | -120.75 |
+-------+--------------+--------------+我知道我的输出格式是由于我试图合并的两个数据格式有不同的索引。但我怎样才能克服这一切?
我不能使用df.merge(df2),因为它们不共享相同的密钥。
我觉得一定有一个非常简单的解决方案,我忽略了。任何帮助都是非常感谢的!
发布于 2018-02-23 05:17:33
这对你的案子有帮助吗?我不确定我们是否站在同一条战线上,但我想这就是你想要做的-
import pandas as pd
import numpy as np
# create random data
amps = pd.DataFrame(np.random.randint(0,100,size=(5, 1)), columns=['value'])
extremas = pd.DataFrame(np.random.randint(0,100,size=(5, 1)), columns=['value'])
# this part
minima = extremas.loc[amps.index, 'value'].reset_index(drop=True)
maxima = extremas.loc[amps.index - 1, 'value'].reset_index(drop=True)
df = pd.DataFrame({'local minima':minima ,'local maxima': maxima})https://stackoverflow.com/questions/48941345
复制相似问题