2016-11-30 12 views
1

私は2列と3​​000行のデータフレームを持っています。パンダ:行を繰り返して、出現頻度を見つける

最初の列は、時間ステップで時間を表しています。例えば、第1行は0、第2は1、...、最後は2999です。

第2列は圧力を表しています。列を反復するにつれて圧力が変化しますが、反復的な動作が見られます。したがって、いくつかのステップごとに、最小値(375)に達した後、再び375などになることがわかります。

私がPythonでやりたいことは、行間を繰り返して見ることです: 1)どの時点で圧力が最小になっているかを確認する

2)最小値間の周波数を求めます。あなたが行方向反復する必要はありません

import numpy as np 
import pandas as pd 
import numpy.random as rnd 
import scipy.linalg as lin 
from matplotlib.pylab import * 
import re 
from pylab import * 
import datetime 

df = pd.read_csv('test.csv') 
row = next(df.iterrows())[0] 
dataset = np.loadtxt(df, delimiter=";") 

df.columns = ["Timestamp", "Pressure"] 
print(df[[0, 1]]) 

答えて

2

、あなたはそれをマスクするmin値に対する列全体を比較することができ、あなたはその後、タイムステップdiffを見つけるためにマスクを使用することができます。

データのセットアップ:

In [45]:  
df[df['value']==df['value'].min()] 

Out[45]: 
    timestep value 
1   1 377 
4   4 377 
0:

In [44]: 
df = pd.DataFrame({'timestep':np.arange(20), 'value':np.random.randint(375, 400, 20)}) 
df 

Out[44]: 
    timestep value 
0   0 395 
1   1 377 
2   2 392 
3   3 396 
4   4 377 
5   5 379 
6   6 384 
7   7 396 
8   8 380 
9   9 392 
10  10 395 
11  11 393 
12  12 390 
13  13 393 
14  14 397 
15  15 396 
16  16 393 
17  17 379 
18  18 396 
19  19 390 

min値に対して列を比較することによって、DFマスク1分または任意の周波数に周波数WRTを見つけるためにあなたが1/60によって上記を分割することができ

In [48]:  
df.loc[df['value']==df['value'].min(),'timestep'].diff() 

Out[48]: 
1 NaN 
4 3.0 
Name: timestep, dtype: float64 

は、我々は間隔の違いを見つけるために、対応する「タイムステップ」の値を見つけるために、locとマスクを使用してdiffを使用することができますあなたが望むユニット

+0

答えてくれてありがとうEdChum。私は、私が既に持っているものに基づいて、 'value'フィールドの圧力の値をどのように割り当てることができますか?例を作るのに 'np.random.randit'を使いましたが、私はすでに存在するものでそれをする方法を知らないのです。 – joasa

+0

あなたのデータを持っていないので私のdfはちょうどモックアップです。あなたのコードの列名をあなたのものに置き換えることができます – EdChum

+0

私は別の質問があります:列を特定の値(たとえば380)と比較したいですか? – joasa

関連する問題