2016-09-24 8 views
0

私は列の中で何千もの行を取る(例えば、列は時間、t)、今は間隔を探したい列の行の間には、第1行から第2行の値を減算することを意味します(dtを見つけるために)。次に、これらの間隔値で新しい列を作成し、それを元の列に対してプロットしたいと思います。この場合、Python以外の言語が役に立つ場合は、その提案についても感謝します。
私はそのための擬似Pythonコードを書かれている:python pandasデータフレームの前の行から列の行を差し引く

import pandas as pd 
import numpy as np 
from sys import argv 
from pylab import * 


import csv 



script, filename = argv 


# read flash.dat to a list of lists 
datContent = [i.strip().split() for i in open("./flash.dat").readlines()] 

# write it as a new CSV file 
with open("./flash.dat", "wb") as f: 
    writer = csv.writer(f) 
    writer.writerows(datContent) 


columns_to_keep = ['#time'] 
dataframe = pd.read_csv("./flash.csv", usecols=columns_to_keep) 


df = pd.DataFrame({"#time"}) 
df["#time"] = df["#time"] + [pd.Timedelta(minutes=m) for m in np.random.choice(a=range(60), size=df.shape[0])] 
df["value"] = np.random.normal(size=df.shape[0]) 

df["prev_time"] = [np.nan] + df.iloc[:-1]["#time"].tolist() 
df["time_delta"] = df.time - df.prev_time 
df 

pd.set_option('display.height', 1000) 
pd.set_option('display.max_rows', 1000) 
pd.set_option('display.max_columns', 500) 
pd.set_option('display.width', 1000) 

dataframe.plot(x='#time', y='time_delta', style='r') 

print dataframe 

show() 

は私のコードを更新しました、そして私はまた、私が働いている.datファイルを共有しています。 https://www.dropbox.com/s/w4jbxmln9e83355/flash.dat?dl=0

+1

パンダシフト機能は、このトリックを行う必要があります。 –

答えて

1

異なる行の値を含む操作を簡単に実行するには、必要な値を同じ行にコピーし、単純な行単位の操作を適用するだけです。

たとえば、あなたの例では、我々は1つのtime列を持つデータフレームなどのようないくつかの他のデータ、必要があるだろう:あなたがからの時間デルタを計算したい場合は

import pandas as pd 
import numpy as np 

df = pd.DataFrame({"time": pd.date_range("24 sept 2016", periods=5*24, freq="1h")}) 
df["time"] = df["time"] + [pd.Timedelta(minutes=m) for m in np.random.choice(a=range(60), size=df.shape[0])] 
df["value"] = np.random.normal(size=df.shape[0]) 

enter image description here

は、前の(または次の、または任意の)行は、単にそこから値をコピーし、減算を実行することができる:

df["prev_time"] = [np.nan] + df.iloc[:-1]["time"].tolist() 
df["time_delta"] = df.time - df.prev_time 
df 

enter image description here

+0

あなたの提案で私のコードを更新したにもかかわらず、私のファイルは分単位でデータを保持していないので、私はいくつかのエラーを持っています。私は作業している元のdatファイルを共有しました。あなたのコードは私のファイルに特化しています。 – bhjghjh

+0

こんにちは。私はあなたのファイルを見ていましたが、それはすでにデルタで日付ではなく、おそらく数ミリ秒またはナノ秒で表されていると思いますか?同じロジックが適用されます。ファイルをデータフレームに読み込んだら、変数 'df'のように' df ["time"] = df.time.apply(lambda ms: pd.Timedelta(ミリ秒= ms)) '(ミリ秒単位で列の意味に適応する)。その後、私が掲示したコードはタイムスタンプの違いや時間差の違いによって両方とも時間差が生じます。 – Svend

+0

ありがとう問題が解決しました – bhjghjh

関連する問題