2016-10-12 1 views
0

Pandas Dataframe을 사용하여 해결할 문제가 약간 있습니다. 나는 두 dataframes 다음 한 : DF1 각 행에 대해 지금Pandas Dataframe 사용자 지정 기간 동안 VWAP 계산

df1 
time,     Date,   Stock, StartTime,  EndTime 
2016-10-11 12:00:00 2016-10-11 ABC  12:00:00.243 13:06:34.232 
2016-10-11 12:01:00 2016-10-11 ABC  12:02:00.243 13:04:34.232 
2016-10-11 12:03:00 2016-10-11 XYZ  08:02:00.243 11:24:23.533 

df2 
time,     Date,   Stock, Price, Volume 
2016-10-11 12:00:00 2016-10-11 ABC  10.0 100 
2016-10-11 12:01:00 2016-10-11 ABC  10.1 300 
... 
2016-10-11 16:01:00 2016-10-11 ABC  10.4 600 
2016-10-11 12:01:00 2016-10-11 XYZ  5.1 1500 
... 
2016-10-11 17:01:00 2016-10-11 XYZ  10.1 200 
... 

을, 나는 날짜 및 증권 열 DF2 그것을 가입하려는 등 DF2에, 나는 내 모든 행의 가중 가격을 계산할 수 오전 df1의 StartTime과 EndTime.

도움 주셔서 감사합니다.

답변

0

병합, 그룹화 및 가중 평균 기능을 적용합니다.

사람들이 쉽게로드 할 수 있도록 데이터를 코드로 마이그레이션했습니다.

df1 = pd.DataFrame({'Date': {0: '2016-10-11', 1: '2016-10-11', 2: '2016-10-11'}, 'Stock': {0: 'ABC', 1: 'ABC', 2: 'XYZ'}, 'EndTime': {0: '13:06:34.232', 1: '13:04:34.232', 2: '11:24:23.533'}, 'StartTime': {0: '12:00:00.243', 1: '12:02:00.243', 2: '08:02:00.243'}, 'time': {0: '12:00:00', 1: '12:01:00', 2: '12:03:00'}}) 
df2 = pd.DataFrame({'Date': {0: '2016-10-11', 1: '2016-10-11', 2: '2016-10-11', 3: '2016-10-11', 4: '2016-10-11'}, 'Volume': {0: 100, 1: 300, 2: 600, 3: 1500, 4: 200}, 'Price': {0: 10.0, 1: 10.1, 2: 10.4, 3: 5.0999999999999996, 4: 10.1}, 'Stock': {0: 'ABC', 1: 'ABC', 2: 'ABC', 3: 'XYZ', 4: 'XYZ'}, 'time': {0: '12:00:00', 1: '12:01:00', 2: '16:01:00', 3: '12:01:00', 4: '17:01:00'}}) 

print df1 
print df2 

나는 당신의 dataframes는 다음과 같이 질문이 좀 불분명하다 가정하고, 나에게 알려 답이 원하는대로 질문에 일치하도록 우리는이 예제를 수정할 수 있으며, 중복 날짜 시간 필드에있다 나는 생략 한 :

  Date  EndTime  StartTime Stock  time 
0 2016-10-11 13:06:34.232 12:00:00.243 ABC 12:00:00 
1 2016-10-11 13:04:34.232 12:02:00.243 ABC 12:01:00 
2 2016-10-11 11:24:23.533 08:02:00.243 XYZ 12:03:00 

     Date Price Stock Volume  time 
0 2016-10-11 10.0 ABC  100 12:00:00 
1 2016-10-11 10.1 ABC  300 12:01:00 
2 2016-10-11 10.4 ABC  600 16:01:00 
3 2016-10-11 5.1 XYZ 1500 12:01:00 
4 2016-10-11 10.1 XYZ  200 17:01:00 



df_merged= df1.merge(df2, on=['Date','Stock']) # Merge 
df_merged = df_merged[['StartTime','EndTime','Price','Volume','Stock']] #Filter Columns 

Without Stock Partition: 
print df_merged.groupby(['StartTime','EndTime']).apply(lambda x: np.average(x['Price'],weights=x['Volume'])) 

With Stock Partition: 
print df_merged.groupby(['StartTime','EndTime','Stock']).apply(lambda x: np.average(x['Price'],weights=x['Volume'])) 

을 제공합니다

StartTime  EndTime  
08:02:00.243 11:24:23.533  5.688235 
12:00:00.243 13:06:34.232 10.270000 
12:02:00.243 13:04:34.232 10.270000 
dtype: float64 


StartTime  EndTime  Stock 
08:02:00.243 11:24:23.533 XYZ  5.688235 
12:00:00.243 13:06:34.232 ABC  10.270000 
12:02:00.243 13:04:34.232 ABC  10.270000 
+0

는 내가 대답으로 질문을 편집중인 참조하십시오. 시원한. – Dickster

+0

감사합니다. 유용하다. – Rahul

관련 문제