2017-11-30 1 views
0

내 목표는 행에 값이 주어지면 (3이라고 가정) 주어진 행의 값을 3 행 아래로 찾습니다. 현재 저는 for 루프를 사용하고 있습니다 만 엄청나게 비효율적입니다.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이있는 경우 Map/HashMap을 사용할 수 있습니다. 여기서 키는 날짜 또는 DaysToReception이고 값은 목록 또는 다른 적절한 데이터 구조를 사용하여 저장할 수있는 다른 정보입니다.

이것은 효율성을 확실히 향상시킵니다.

"내가 아래 값을 검색하는 행의 수는"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]