【发布时间】:2019-03-21 06:58:29
【问题描述】:
我在下面添加了一个“非均匀列抽样”案例。
统一列抽样
想象以下数据集:
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
我的问题是:
- 这是 reindex 方法的预期用例吗
- 如何实现?
非均匀列抽样
想象一下这个数据集:
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.01,这就是为什么 y 是 nan
-
@Wen,无论公差值如何,问题仍然存在。实际上,我相信预期的效用是首先应用“fillna()”,然后执行“reindex()”。现在发生的是它正在重新索引,但找到最接近的值是 NAN。但是如果你先“fillna()”,你会失去'x'和'y'列之间的任何可变采样率(尽管这个例子没有说明这一点)。
-
@Hamid 在您更新的示例中,
0.03的 y 列的值在公差范围内,即0.023 -> 5.0,那么您为什么在重新索引后期望 NaN? -
@a_guest,我认为因为
y的输出实际上应该只在[0.02, 0.04]上重新索引,而NaN是将DataFrames连接在一起的结果。 -
@ALollz 有道理,谢谢。