2017-01-25 6 views
3

私はcsvから読み込まれ、無関係なデータを持つデータフレームを持っています。 1つの列、SystemStartを評価することで、無関係なものを判断します。 その行のSystemStartより低い日付値の見出しを持つ列にある行ごとのデータはすべて、nanに設定されます。たとえば、index = 'one'のSystemStartの日付は '2016-1-5'で、pd.date_rangeが設定されているときは、値は設定されません。 index = 'three'は '2016-1-7'なので、元のデータを置き換える2つの値があります。データフレームの行に操作を適用するにはどうすればよいですか?

私は行単位で行け、すべての列でnp.nan値を投げることができますが、それは遅いです。より速い方法がありますか?

私は以下の代表的なデータフレームを作成しました。反復操作なしで同じ結果を得ることを望んでいます。どんな助けでも大歓迎です。以下は

import pandas as pd 
import numpy as np 

start_date = '2016-1-05' 
end_date = '2016-1-7' 
dates = pd.date_range(start_date, end_date, freq='D') 
dt_dates = pd.to_datetime(dates, unit='D') 
ind = ['one', 'two', 'three'] 

df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns = dt_dates, index = ind) 

df['SystemStart'] = pd.to_datetime(['2016-1-5', '2016-1-6', '2016-1-7']) 

print 'Initial Dataframe: \n', df 

for msn in df.index: 
    zero_date_range = pd.date_range(start_date, df.loc[msn,'SystemStart'] - pd.Timedelta(days=1), freq='D') 

    # we set zeroes for all columns in the index element in question - this is a horribly slow way to do this 
    df.loc[msn, zero_date_range] = np.NaN 

print '\nAltered Dataframe: \n', df 

初期と変化した、DFの出力です:私は

Initial Dataframe: 
     2016-01-05 00:00:00 2016-01-06 00:00:00 2016-01-07 00:00:00 \ 
one      24     23     65 
two      21     91     59 
three     62     77     2 

     SystemStart 
one 2016-01-05 
two 2016-01-06 
three 2016-01-07 

Altered Dataframe: 
     2016-01-05 00:00:00 2016-01-06 00:00:00 2016-01-07 00:00:00 \ 
one     24.0     23.0     65 
two     NaN     91.0     59 
three     NaN     NaN     2 

     SystemStart 
one 2016-01-05 
two 2016-01-06 
three 2016-01-07 

答えて

2

まず最初は、その後、私は別のシリーズにSystemStartを取り除くSystemStartdatetime

df.SystemStart = pd.to_datetime(df.SystemStart) 

であることを確認しています

st = df.SystemStart 

それから私はその後、私は私がdatetime

d1.columns = pd.to_datetime(d1.columns) 

に残っている列は最後に、私は、適切な細胞をマスクとでSystemStartバックに参加する放送numpyを使用して変換し、私のdf

d1 = df.drop('SystemStart', 1) 

からSytstemStartをドロップします。

d1.where(d1.columns.values >= st.values[:, None]).join(st) 

enter image description here

+0

こんにちは!私はパンダの放送事業に関する良いガイドを教えていただけますか?私はナンシーのガイドを読んだが、パンダ自体にその知識を伝えるのに手を差し伸べている。私はアシストに感謝します。 –

+1

@InderJalli実験、検索、質問。それが私が与えることができる最高のアドバイスです。 – piRSquared

関連する問題