2017-11-30 4 views
0

私の目標は、行(3と言う)に値を与え、与えられた列の値を3行下に探します。現在私はforループを使用してperfomingですが、それは非常に非効率です。Python:同じ列の異なる行を使用して効率的に操作を行う方法は?

私は、この問題を解決するのに役立つベクトル化があると読んだことがありますが、わかりません。

私のデータは、このようなものです:

Date DaysToReception Quantity QuantityAtTheEnd 20/03 3 102 21/03 - 88 22/03 - 57 23/03 5 178 24/03

そして私が取得したい:あなたの助けのための

Date DaysToReception Quantity QuantityAtReception 20/03 3 102 178 21/03 - 88 22/03 - 57 23/03 5 178 24/03 ...

感謝を!

+0

*行の数は、私は以下の値が値「DaysToReception」に依存して検索することを指摘することは重要です –

答えて

0

ユニークな日付またはDaysToReceptionがある場合は、実際にキーが日付またはDaysToReceptionであるMap/HashMapを使用できます。値は、リストまたは他の適切なデータ構造を使用して格納できるその他の情報になります。

これは間違いなく効率を改善します。

「次の値を検索する行の数は、「DaysToReception」の値によって異なりますが、「DaysToReception」は一意ではないと考えられます。その場合、マップのキーは日付になります。

+0

ありがとう!私があなたが言及したようにマップを使用したと –

+0

問題はありません@alejandropareja –

0

私はパンダでこれを行うと考えることができ、最も簡単な方法は次のとおりです。

# something like your dataframe 
df = pd.DataFrame(dict(date=['20/03', '21/03', '22/03', '23/03'], 
         days=[3, None, None, 5,], 
         quant=[102, 88, 57, 178])) 
# get the indexs of all days that aren't missing 
idxs = df.index[~pd.isnull(df.days)] 
# get number of days to go 
values = df.days[idxs].values.astype(int) 
# get index of three days ahead 
new_idxs = idxs+values 
# create a blank column 
df['quant_end'] = None 
# Now fill it with the data we're after 
df.quant_end[idxs] = df.quant[new_idxs] 
関連する問題