Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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_Dataframe - Fatal编程技术网

Python 计算数据帧中行之间的距离

Python 计算数据帧中行之间的距离,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,除了一些1.0的值之外,它用零填充。对于每一行,我要计算到下一次出现1.0的距离。知道怎么做吗 输入数据帧: index col1 0 0.0 1 0.0 2 0.0 3 0.0 4 1.0 5 0.0 6 0.0 7 1.0 8 0.0 预期输出数据帧: index col1 0 4.0 1 3.0 2 2.0 3 1.0 4 0.0 5 2.0 6

我有一个数据帧,除了一些1.0的值之外,它用零填充。对于每一行,我要计算到下一次出现1.0的距离。知道怎么做吗

输入数据帧:

index col1
0     0.0
1     0.0
2     0.0
3     0.0
4     1.0
5     0.0
6     0.0
7     1.0
8     0.0
预期输出数据帧:

index col1
0     4.0
1     3.0
2     2.0
3     1.0
4     0.0
5     2.0
6     1.0
7     0.0
8     0.0
使用:

说明

首先通过
1
与以下内容进行比较:

然后通过以下方式进行交换订购:

通过以下方式创建组:

使用
升序=False将组传递给,以便从后面计数:

print (df.groupby(df['col1'].eq(1).iloc[::-1].cumsum()).cumcount(ascending=False))
0    4
1    3
2    2
3    1
4    0
5    2
6    1
7    0
8    0
dtype: int64
print (df['col1'].eq(1))
0    False
1    False
2    False
3    False
4     True
5    False
6    False
7     True
8    False
Name: col1, dtype: bool
print (df['col1'].eq(1).iloc[::-1])
8    False
7     True
6    False
5    False
4     True
3    False
2    False
1    False
0    False
Name: col1, dtype: bool
print (df['col1'].eq(1).iloc[::-1].cumsum())
8    0
7    1
6    1
5    1
4    2
3    2
2    2
1    2
0    2
Name: col1, dtype: int32
print (df.groupby(df['col1'].eq(1).iloc[::-1].cumsum()).cumcount(ascending=False))
0    4
1    3
2    2
3    1
4    0
5    2
6    1
7    0
8    0
dtype: int64