pandas 适用于 numpy interp,维数问题

pandas apply with numpy interp, dimension problems

我想将在一组动态频率下进行的测量插入到一组固定频率中。我使用 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。

'f2':[4,6]

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

感谢任何帮助。

问题是您正在尝试 return 一个不减少的数组。您可以改为 return 值列表。

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

如果你需要内插的DataFrame,那么也许:

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