Python-将数值均匀分布到最近的行
假设我有一个数据集,如:Python-将数值均匀分布到最近的行,python,pandas,numpy,dataframe,scipy,Python,Pandas,Numpy,Dataframe,Scipy,假设我有一个数据集,如: > NaN NaN NaN 12 NaN NaN NaN NaN 10 NaN NaN NaN NaN 8 NaN 6 NaN 我希望在其周围NaNs的值之间尽可能均匀地分布这些值。例如,值12应考虑其周围的NaN,并将其均匀分布,直到其接触到第二个非NaN值的NaNs 例如,前12名应该只考虑他最近的N > NaN NaN NaN 12 NaN NaN 输出应为: 2 2 2 2 2 (Distributed by the 12) 2 2 2 2 2
> NaN NaN NaN 12 NaN NaN NaN NaN 10 NaN NaN NaN NaN 8 NaN 6 NaN
我希望在其周围NaN
s的值之间尽可能均匀地分布这些值。例如,值12应考虑其周围的NaN
,并将其均匀分布,直到其接触到第二个非NaN
值的NaN
s
例如,前12名应该只考虑他最近的N
> NaN NaN NaN 12 NaN NaN
输出应为:
2 2 2 2 2 (Distributed by the 12)
2 2 2 2 2 (Distributed by the 10)
2 2 2 2 (Distributed by the 8)
2 2 2 (Distributed by the 6)
> NaN NaN NaN 12 NaN NaN NaN NaN 10 NaN NaN NaN NaN 8 NaN 6 NaN
> 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
我最初考虑使用平滑器,比如熊猫中的插值函数。它不一定是无损的,也就是说,我们可能会损失或得到比进程中的总和更多的东西。与使用有损平滑器相比,是否有任何库可以执行这种分布?您可以使用,最后
简短版本:
>> series = pd.Series(x).interpolate(method='nearest').ffill().bfill()
>> series.groupby(series).apply(lambda k: k/len(k))
[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0]
要说明发生了什么,请创建
df
df = pd.DataFrame()
df["x"] = x
其中x
是您提供的系列。现在:
>>> df["inter"] = df.x.interpolate(method='nearest').ffill().bfill()
>>> df["inter"] = df.groupby("inter").inter.apply(lambda k: k/len(k))
>>> df
x inter
0 NaN 2.0
1 NaN 2.0
2 NaN 2.0
3 12.0 2.0
4 NaN 2.0
5 NaN 2.0
6 NaN 2.0
7 NaN 2.0
8 10.0 2.0
9 NaN 2.0
10 NaN 2.0
11 NaN 2.0
12 NaN 2.0
13 8.0 2.0
14 NaN 2.0
15 6.0 3.0
16 NaN 3.0
当距离相同时会发生什么?e、 g.如果最后是
7
和6
,您将如何分配值?那么您不分配7,而是分配6。您所说的“使用算法的方法”是什么意思?您更喜欢自己编写流程代码,而不是使用包,是吗?我认为这是一个糟糕的说法。让我把它取下来。是的,你是对的,应该是23。