大熊猫适用于numpy interp,尺寸问题

时间:2018-12-12 16:07:36

标签: 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)
#     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]

然后没有错误,并返回正确的答案

感谢您的帮助。

1 个答案:

答案 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