我想将在动态频率集上进行的测量值内插到固定频率集上。我将Python 3.7与pandas.apply和numpy.interp结合使用:
import numpy as np
import pandas as pd
df = pd.DataFrame({'m1':[2.,3.],
'm2':[4.,6.],
'm3':[2.,3.],
'shift':[1.1,1.2]})
print (df)
# m1 m2 m3 shift
# 0 2.0 4 2.0 1.1
# 1 3.0 6 3.0 1.2
freqs =np.array([10.,20.,30.])
def myfunction(x):
newfreqs = freqs*x[-1]
result = np.interp(freqs,newfreqs,x[:-1])
return result
print(df.apply(myfunction, axis=1,raw=True))
运行代码时出现错误:
ValueError: Shape of passed values is (3, 2), indices imply (4, 2)
如果将 input列之一更改为int-type ,则为f.ex。
'f2':[4,6]
然后没有错误,并返回正确的答案。
感谢您的帮助。
答案 0 :(得分:1)
问题是您试图返回一个不会减少的数组。您可以改为返回值列表。
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\Extensions"
如果您需要插值的DataFrame,那么也许:
def myfunction(x):
newfreqs = freqs*x[-1]
result = np.interp(freqs, newfreqs, x[:-1])
return [*result]
df.apply(myfunction, axis=1, raw=True)
#0 [2.0, 3.6363636363636367, 2.5454545454545454]
#1 [3.0, 5.0, 4.5]
#dtype: object