我在下面添加了一个“非均匀列采样”案例。
想象一下以下数据集:
x y
t
0.010 1.0 NaN
0.015 NaN 5.0
0.022 3.0 NaN
0.023 NaN 4.0
0.031 5.0 NaN
0.032 NaN 7.0
目标是将该数据重新索引到一个公共的采样间隔,并关联最接近的采样点。即返回:
x y
t
0.01 1.0 5.0
0.02 3.0 4.0
0.03 5.0 7.0
我尝试使用pandas DataFrame.reindex方法。但是,它似乎不起作用。这是一个示例:
import pandas as pd
import numpy as np
data_dict = {'t':[0.01 , 0.015 , 0.022 , 0.023 , 0.031 , 0.032],
'x':[ 1 , np.nan, 3 , np.nan, 5 , np.nan],
'y':[np.nan, 5 , np.nan, 4 , np.nan, 7] }
df = pd.DataFrame(data_dict)
df.set_index('t', inplace=True)
df.reindex([0.01, 0.02, 0.03], method='nearest', tolerance=0.01)
结果是:
x y
t
0.01 1.0 NaN
0.02 3.0 NaN
0.03 5.0 NaN
我的问题是:
想象一下这个数据集:
x y
t
0.010 1.0 NaN
0.022 3.0 NaN
0.023 NaN 5.0
0.031 5.0 NaN
0.039 NaN 7.0
0.041 4.0 NaN
在这种情况下,列的采样频率确实是不同的,但是我们希望将它们重新索引为通用的时标。 reindex 如何应用以获取以下信息:
x y
t
0.010 1.0 NaN
0.020 3.0 5.0
0.030 5.0 NaN
0.040 4.0 7.0
两个问题。
答案 0 :(得分:2)
您可以按列重新索引,预先删除NaN,然后将各个部分重新粘在一起:
t = [0.01, 0.02, 0.03]
df2 = pd.concat(
map(lambda c: df[c].dropna().reindex(t, method='nearest', tolerance=0.01),
df.columns),
axis=1
)
答案 1 :(得分:1)
问题是NaN
值是y
列中最接近的匹配项,因此它正在选择它们。您可以先进行插值以适当填充NaN
值,然后重新索引。
df.interpolate(method='nearest').ffill().bfill().reindex([0.01, 0.02, 0.03], method='nearest')
x y
t
0.01 1.0 5.0
0.02 3.0 4.0
0.03 5.0 7.0