Python 如何合并具有不同索引的两个数据帧?
我得到了这一系列带有指数的数据点;因此,数据帧如下所示:Python 如何合并具有不同索引的两个数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我得到了这一系列带有指数的数据点;因此,数据帧如下所示: index value 0 3.075 1 44.338 2 10.030 然后我编写了一个函数,get_extera,它查找所有局部极值并返回一个包含3列的数据帧:index,value,type 索引=原始给定数据集中极值的索引 值=找到的局部极值的值 类型=最大值或最小值 然后,使用get_extrema的结果,我编写了另一个函数,用于查找极值对的振幅(即
index value
0 3.075
1 44.338
2 10.030
然后我编写了一个函数,get_extera
,它查找所有局部极值并返回一个包含3列的数据帧:index
,value
,type
索引=原始给定数据集中极值的索引
值=找到的局部极值的值
类型=最大值或最小值
然后,使用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
Extremas是从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})
假设您有相应的行(即最大数据帧中的行1对应于最小数据帧中的行1,依此类推),您可以在数据帧上使用
reset\u index
。这将把索引更改为0,1,2…
。类似于extremas.loc[amps.index,'value'].reset\u index()
但我不想正确重置索引?我需要索引值来获得原始值。正确的?如果您查看我创建“df”的代码行…:/如果我错了,请纠正我。。。。大部分时间都是这样的哈哈哈。滴。na可能值得一试look@ConfusinglyCuriousTheThirdAttributeError:“函数”对象没有属性“na”;我也不认为这有任何意义??:/非常感谢你!!!这正是我需要的。。。。非常感谢。很明显,这是一个非常简单的修复方法,我只是无法将我的头围绕它。你摇滚:)很高兴能帮上忙:)。小狗画得好。