Python 熊猫适用于numpy interp,尺寸问题
我想把在一组动态频率下进行的测量插入到一组固定的频率中。我将Python 3.7与pandas.apply和numpy.interp一起使用:Python 熊猫适用于numpy interp,尺寸问题,python,pandas,numpy,interpolation,apply,Python,Pandas,Numpy,Interpolation,Apply,我想把在一组动态频率下进行的测量插入到一组固定的频率中。我将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)
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)
如果我将其中一个输入列更改为int类型,f.ex
然后没有错误,返回正确的答案
非常感谢您的帮助。问题是您正在尝试返回一个数组,这并不会降低性能。您可以返回一个值列表
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
如果需要插值数据帧,则可能:
import pandas as pd
pd.DataFrame(df.apply(myfunction, axis=1 ,raw=True).tolist(),
columns=df.columns[0:3]).add_suffix('_interp')
# m1_interp m2_interp m3_interp
#0 2.0 3.636364 2.545455
#1 3.0 5.000000 4.500000
美丽的!100%解决了这个问题。非常感谢。
import pandas as pd
pd.DataFrame(df.apply(myfunction, axis=1 ,raw=True).tolist(),
columns=df.columns[0:3]).add_suffix('_interp')
# m1_interp m2_interp m3_interp
#0 2.0 3.636364 2.545455
#1 3.0 5.000000 4.500000