2016-12-05 3 views
0

2つの条件に基づいて行を見つけ、これらに値を割り当てるアルゴリズムを開発しようとしています。Pandasは指定された時間内に日付時刻の行を見つけよう

基本的に、私は列値を見つけ、列が値であり、以下の非常に簡略化された例では、日時カラム

に基づいて他の値から指定はtimedeltaより大きく発生する行を検索するために探していますベア

は、私は簡単に十分な最初の部分を行うが、

timefilter = datetime.timedelta(minutes=1) 
df.loc[df['Value'] == 'Dog'] = 'Bear' 
acpect時間デルタを使用する方法についての完全な損失にすることができます
DateTime   Value New Column 
2015-10-25 00:00 Dog Bear 
2015-10-25 00:01 Dog Dog 
2015-10-25 00:02 Cat Cat 
2015-10-25 00:03 Dog Bear 

犬であり、猫から1分以上であると彼らに新たな価値を与えます

+0

私はあなたがルールに十分な詳細を与えているとは思いません。基準が満たされない場合、 'New Column'値は' Value'カラムと同じですか?最後の行に新しい列の値として 'Dog'があるべきではありませんか? –

+0

ダミーの例を作成しようとすると悪いです 値がDogの場合はルールを変更し、値= Catより前のtimefilterより大きい場合はルールを変更する必要があります。これが満たされない場合、新しい列=値 – user2956554

答えて

0

@ user2956554 - あなたが探している主なコンポーネントは、ファンダの.shift()機能です。それはあなたが分の差分を取得するのに役立ちます。ここで私は一緒に入れて迅速なコードがあります:ノートの

import pandas as pd 

df = pd.DataFrame({'time':['1/3/2015 00:00','1/3/2015 00:01','1/3/2015 00:02','1/3/2015 00:03'], 'value':['Dog','Dog','Cat','Dog']}) 

df['time'] = pd.to_datetime(df['time'], infer_datetime_format = True) 
df['delta'] = pd.to_datetime(df['time'] - df['time'].shift(1)).dt.minute 

df['new_column'] = df['value'] 
df['new_column'][(df['delta'] >= 1) & (df['value'] == 'Dog') & (df['value'].shift(1) == 'Cat')] = 'Bear' 
df.drop('delta', axis=1, inplace=True) # if you want to get rid of the 'delta' column 

ポイント:パンダインデックススタイルに基づいて自分のコードの最後の行に2番目の警告をスローしますが、コードが動作します。その背後にある警告と理由は、私の給与等級の少し上ですが、詳細を知りたい場合は、http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copyのリンクをご覧ください。

ここで(警告を含む)出力です:

C:\Program Files\Sublime Text 3\pandas_time_test.py:9: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame 

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 
    df['new_column'][(df['delta'] >= 1) & (df['value'] == 'Dog') & (df['value'].shift(1) == 'Cat')] = 'Bear' 
       time value new_column 
0 2015-01-03 00:00:00 Dog  Dog 
1 2015-01-03 00:01:00 Dog  Dog 
2 2015-01-03 00:02:00 Cat  Cat 
3 2015-01-03 00:03:00 Dog  Bear 
関連する問題