根据传递的列参数,对Pandas Dataframe 应用变化函数

7cwmlq89  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(98)

我想对Pandas Dataframe 的每一行应用一个函数,参数不是跨行可变的,而是函数本身根据列中的值对每一行都不同,让我们更具体地说:

import pandas as pd 
from scipy.interpolate import interp1d

d = {'col1': [1, 2], 'col2': [2, 4], 'col3': [3, 6]}
df = pd.DataFrame(data=d)

| | 列1|列2|第3栏|
| - ------|- ------|- ------|- ------|
| 无|1个|第二章|三个|
| 1个|第二章|四个|六个|
现在,我想要实现的是按行外推第1列到第3列。对于第一行,这将是:

f_1 =interp1d(range(df.shape[1]), df.loc[0], fill_value='extrapolate')

具有外推值f_1(df.shape[1]).item() = 4.0
因此,我想添加的列是:
| 第4栏|
| - ------|
| 四个|
| 八个|
我试过以下方法:

import numpy as np
def interp_row(row):
    n = row.shape[1]
    fun = interp1d(np.arange(n), row, fill_value='extrapolate')
    return fun(n+1).item()

df['col4'] = df.apply(lambda row: interp_row(row))

我能搞定吗?

gr8qqesn

gr8qqesn1#

你就快到了

import pandas as pd 
from scipy.interpolate import interp1d
import numpy as np

d = {'col1': [1, 2], 'col2': [2, 4], 'col3': [3, 6]}
df = pd.DataFrame(data=d)

def interp_row(row):
    n = row.shape[0]
    fun = interp1d(np.arange(n), row, fill_value='extrapolate')
    return fun(n).item()

df['col4'] = df.apply(lambda row: interp_row(row), axis=1)
print(df)

该函数返回:

col1  col2  col3  col4
0     1     2     3   4.0
1     2     4     6   8.0

相关问题