2016-06-27 1 views
0

私は、Philips Actiwatchからのアクティビティ数データを含むpd.dataframeを持っています。 60分を超える時間にアクティビティ数がない場合、ユーザーはおそらくデバイスを装着していない可能性があり、この範囲は削除する必要があります。与えられた基準が所定の期間満たされた場合のデータ範囲のNaN化方法

データフレーム内で60分を超える期間(各行は1分)を検出し、その期間を完全に削除するにはどうすればよいですか。したがって、59行以下のアクティビティ数が0の場合は何も起こりませんが、60行以上のアクティビティ数が0であれば(80行とします)、このデータはNaNになります。

データをcsvファイルには、ここで見つけることができます:

# remove all data where Activity = 0 for 60 or more consecutive minutes: 

zero_count = 0 
for n in range(len(data)): 
    if data['Activity'].loc[n] == NaN: 
     continue 
    elif data['Activity'].loc[n] > 0: 
     continue 
    elif data['Activity'].loc[n] = 0: 
     while data['Activity'].loc[n] = 0: 
      zero_count = zero_count + 1 
     if zero_count >60: 
      # NaN last zero_count number of lines. 
      zero_count = 0 
      break 
     else: 
      zero_count = 0 
      break 
    else: 
     print "Non-wear detection error" 
     break 

は、私は何をしようとしていたことは、それぞれのチェックです: https://www.dropbox.com/s/6h43nrozohc9vd8/Actiwatch%20Data?dl=0

をそのままかなり役に立たない、これは私が捕まってしまったところでありますゼロであれば0を加算し、ゼロ以外の桁を読み込んだ場合はzero_countが60より大きいかどうかを調べる必要があります。そうであれば範囲全体をNaNし、 zero_count。 <の場合は、データをNaNしないでzero_countをリセットするだけです。

私は何をしようとしているのか理解していて、1)コードを仕事よりも上にするか、2)私がやろうとしていることを行う上でより良いアイデアがあることを願っています。

ありがとうございました

答えて

0

あなたは近くでしたが、あなたのコードには無限ループがあります。あなたのifステートメントのロジックのいくつかは少しオフです。ここに修正された解決策があります。

streakCount = 0 # Counts the longest current streak 
streakIndex = 0 # Keeps track of where the streak started 
for n in range(len(data)): 
    if data['Activity'].loc[n] = 0: 
     if streakCount == 0: 
      streakIndex = n 
     streakCount += 1 
    elif data['Activity'].loc[n] > 0: 
     if streakCount > 60: 
      for i in range(streakIndex,streamIndex+streakCount): # loop to Nan out the range of 0's 
       data['Activity'].loc[i] = float('nan') 
     streakCount = 0 # reset streak 
+0

私の問題を見て解決策を提案していただきありがとうございます。あなたのコードは、60分以上活動していない最初の期間働いているようです。それは第2ラウンドを検出しませんでした。私は "range(index、amount)"の部分を理解していないので、そこに問題があると思われますか? 元のcsvファイルに80行の0アクティビティを2つ導入しました。この新しいファイルは、 https://www.dropbox.com/s/cko6990vuqsgkuz/TNW.csv?dl=0 注:TNW(.csv)は「Test Non-Wear」の略です。 あなたが私をさらに手伝ってくれるかどうか:あなたの答えをありがとう! – RobHenst

+0

@RobHenstはい、あなたは問題がどこにあるのか正確です。私はそのループをとり、インデックスと量を取った別の関数でラップしました。しかし、それは本当に小さなコードのチャンクだったので、私はそれを取り出した。私はその変更を提出する前にテストしなかった。私は修正されたソリューションに更新しました。 – sookool99

+0

こんにちはSookool99、私の遅れた感謝のため申し訳ありません。コードは完璧に動作します!私の問題解決のための時間とエネルギーを費やしてくれてありがとう。私は心から感謝しています!最高です、ロブ。 – RobHenst

関連する問題