我得到了带有索引的这一系列数据点;因此数据框如下所示:

index        value
0            3.075
1           44.338
2           10.030


然后,我编写了一个函数get_extrema,该函数查找所有局部极值并返回包含3列的数据框:indexvaluetype


  index =原始给定数据集中的极值索引
  
  值=找到的局部极值
  
  类型=“最大”或“最小”


然后,使用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 df


极值是从get_extremas输出的数据帧,col是包含所述数据帧中极值的列的名称,n是在本地最小/最大对之间具有最大差异的前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),因为它们不共享相同的密钥。

我觉得我必须忽略一个非常简单的解决方案。任何帮助表示赞赏!

最佳答案

这对您有帮助吗?我不确定我们是否在同一页面上,但是我认为这是您正在尝试执行的操作-

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})

关于python - 如何合并具有不同索引的两个数据框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48941345/

10-12 16:54
查看更多