繁体   English   中英

计算熊猫DataFrame中行之间的距离

[英]Compute distance between rows in pandas DataFrame

我有一个熊猫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
7     0.0
8     0.0

采用:

df['new'] = df.groupby(df['col1'].eq(1).iloc[::-1].cumsum()).cumcount(ascending=False)
print (df)
   col1  new
0   0.0    4
1   0.0    3
2   0.0    2
3   0.0    1
4   1.0    0
5   0.0    2
6   0.0    1
7   1.0    0
8   0.0    0

说明

首先将1Series.eq进行比较:

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

然后通过Series.iloc交换顺序:

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

通过Series.cumsum创建组:

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

将组以ascending=False传递给GroupBy.cumcount ,以从后面进行计数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM