Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将数值均匀分布到最近的行_Python_Pandas_Numpy_Dataframe_Scipy - Fatal编程技术网

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。