Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫适用于numpy interp,尺寸问题_Python_Pandas_Numpy_Interpolation_Apply - Fatal编程技术网

Python 熊猫适用于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)

我想把在一组动态频率下进行的测量插入到一组固定的频率中。我将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)
如果我将其中一个输入列更改为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