2016-06-23 8 views
-2

私はまだパンダには新しくありません。私は値が0の行の数を次の行の値で数えたいと思います。pythonデータフレームの塗りつぶされた値の間の行数をカウントします。

id Distance 
00 0 
01 0 
02 0 
03 0 
04 0 
05 10 
06 0 
07 0 
08 0 
09 0 
10 16 
11 0 
12 0 
13 6 

、それがこれに変換することがあります:

id Distance  count 
05 10   6 
10 16   6 
13 6    3 

おかげ

+0

何を試しましたか?私は '' 'non_zeros = np.nonzero(data.Distance.values)' ''のようなものから始めます。これで、単純なループを使って必要な値を数えることができます。 – sascha

+0

私はそれをforループで動作させることができましたが、それは信じられないほど厄介でした。私は非ゼロに目を通し、前にそれを聞いたことはありません。 – Risato

答えて

0

をこのコードは、あなたが望むものを達成しそう例えば、私はこのようになりますデータフレームを利用したいと思います。 countsがオンザフライで修正されているため、.copy()が必要であることに注意してください。

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'Distance': [0,0,0,0,0,10,0,0,0,0,16,0,0,6]}) 

non_zeros = df['Distance'].values != 0 
zeros = ~non_zeros 

counts = np.cumsum(zeros)[non_zeros] 
counts[1:] -= counts[:-1].copy() 

df = df[non_zeros] 
df['count'] = counts 

print(df) 

このコードは、あなたがcount列に+1を追加することもでき、出力

Distance count 
5   10  5 
10  16  4 
13   6  2 

を生成します。

関連する問題