首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将两个数据格式与不同的索引合并?

如何将两个数据格式与不同的索引合并?
EN

Stack Overflow用户
提问于 2018-02-23 04:53:48
回答 1查看 1.4K关注 0票数 2

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

代码语言:javascript
复制
index        value
0            3.075
1           44.338
2           10.030

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

索引=原始给定数据集中极值的索引 value =发现的局部极值的值 类型= 'max‘或'min’

然后,利用get_extrema的结果,我编写了另一个函数,它查找极值对的振幅(也就是局部最小值和局部最大值之间的差值).我只想返回最大振幅的顶级对:

代码语言:javascript
复制
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

Extremas是get_extremas输出的数据,col是包含上述数据中极值的列的名称,n是在本地min/max对之间差异最大的顶部n对的数目。

它工作正常,但答案输出有点奇怪:

代码语言:javascript
复制
+-------------------------------------+
|       | 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      |
+-------+--------------+--------------+

我想要的输出:

代码语言:javascript
复制
+-------------------------------------+
|       | local maxima | local minima |
+-------+--------------+--------------+
| 0     | 433.75       | -99.00       |
| 1     | 438.00       | -88.25       |
| 2     | 437.75       | -120.75      |
+-------+--------------+--------------+

我知道我的输出格式是由于我试图合并的两个数据格式有不同的索引。但我怎样才能克服这一切?

我不能使用df.merge(df2),因为它们不共享相同的密钥。

我觉得一定有一个非常简单的解决方案,我忽略了。任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 05:17:33

这对你的案子有帮助吗?我不确定我们是否站在同一条战线上,但我想这就是你想要做的-

代码语言:javascript
复制
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})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48941345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档