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

时间:2019-04-12 12:18:09

标签: python pandas dataframe

除了从1.0值开始,我有一个用零填充的pandas DataFrame。对于每一行,我想计算到下一次出现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 个答案:

答案 0 :(得分:2)

使用:

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