如何在python数据框中插入值?

时间:2019-07-01 08:48:24

标签: python dataframe

我在python中有一个带有2列的数据框。我想用一栏输入数据框并获取第二栏的值。有时值可以是精确的,但也可以是2行之间的值。

我有这个示例数据框:

    x   y
0   0   0
1   10  100
2   20  200

如果我用x的值检查数据帧,我想找到y的值。例如,如果我在数据框中输入的值为10,则得到的值为100。但是,如果我检查为15,则需要在y的两个值之间进行插值。有功能吗?

2 个答案:

答案 0 :(得分:1)

您可以查看interpolate模块(doc)中提供的Pandas方法。但我不确定是否能回答您的问题。

您可以使用interp1d模块中的sklearn来完成此操作。插值有几种类型:“线性”,“最近”,“零”,“线性”,“二次”,“三次” ...您可以在(doc page)上找到列表。

插值过程可以概括为三个步骤:

  1. 缺失无缺失值之间分割数据。我使用isna (doc)
  2. 使用不丢失值的数据创建插值函数。我使用interp1d (doc)
  3. 内插(预测缺失值)。只需在缺少的数据(列x)上调用第2步中的函数find。

代码在这里:

# Import modules
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d

# Data
df = pd.DataFrame(
    [[0,   0],
     [10, 100],
     [11, np.NaN],
     [15, np.NaN],
     [17, np.NaN],
     [20,   200]],
    columns=["x", "y"])
print(df)
#     x      y
# 0   0    0.0
# 1  10  100.0
# 2  11    NaN
# 3  15    NaN
# 4  17    NaN
# 5  20  200.0

# Split data in training (not NaN values) and missing (NaN values)
missing = df.isna().any(axis=1)
df_training = df[~missing]
df_missing = df[missing].reset_index(drop=True)

# Create function that interpolate missing value (from our training values)
f = interp1d(df_training.x, df_training.y)

# Interpolate the missing values
df_missing["y"] = f(df_missing.x)
print(df_missing)
#     x      y
# 0  11  110.0
# 1  15  150.0
# 2  17  170.0

您可以在此link上找到有关该主题的其他著作。

答案 1 :(得分:1)

vector可能是线性插值的最简单方法:

&

通过您的示例数据可以得出:

DT[DT[, Reduce(`&`, Map(`==`, .SD, DF$X2)),.SDcols = as.character(DF$X1)]]
#   x y v
#1: a 3 2

您甚至可以直接这样做:

numpy.interp