使用Pandas在列之间插入任意值

luaexgnf  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(52)

我有包含'DaysFrom'列的记录,以及包含标准'DaysFrom'集值的其他列:

'Date'      'DaysFrom'  '90'    '180'   '360'
2023-11-04   135         4       5       12
2023-11-05   360         3       5       20
2023-11-06   270         5       7       15
2023-11-07   180         6       3       10

字符串
我想为“DaysFrom”列中的值计算线性插值(“IntVal”):

'Date'      'DaysFrom'  '90'    '180'   '360'   'IntVal'
2023-11-04   135         4       5       12      4.5
2023-11-05   360         3       5       20      20
2023-11-06   270         5       7       15      11
2023-11-07   180         6       3       10      3


为了便于计算,上面的示例仅使用落在一列或两列中间的“DaysFrom”值,但“DaysFrom”可以是90到360之间的任意值。

pgvzfuti

pgvzfuti1#

如果要使用所有值进行插值(如果它们不都在一条直线上),可以使用numpy.interp循环遍历行:

import numpy as np

cols = df.columns[2:]
tmp = df[cols]

df['IntVal'] = [np.interp(df.loc[i, 'DaysFrom'], cols, tmp.loc[i])
                for i in df.index]

字符串
输出量:

Date  DaysFrom  90  180  360  IntVal
0  2023-11-04       135   4    5   12     4.5
1  2023-11-05       360   3    5   20    20.0
2  2023-11-06       270   5    7   15    11.0
3  2023-11-07       180   6    3   10     3.0

vkc1a9a2

vkc1a9a22#

您可以根据DaysFrom范围有条件地进行线性插值:

import numpy as np
first_h = (df.DaysFrom - 90) / 90 * (df['180'] - df['90']) + df['90']
second_h = (df.DaysFrom - 180) / 180 * (df['360'] - df['180']) + df['180']

df['IntVal'] = np.where(df.DaysFrom < 180, first_h, second_h)

df
#         Date  DaysFrom  90  180  360  IntVal
#0  2023-11-04       135   4    5   12     4.5
#1  2023-11-05       360   3    5   20    20.0
#2  2023-11-06       270   5    7   15    11.0
#3  2023-11-07       180   6    3   10     3.0

字符串

相关问题