2016-09-07 2 views
0

시간, 나침반 데이터, 가속도계 데이터, 자이로 스코프 데이터 및 카메라 패닝 정보와 같은 열 이름을 가진 세 명의 사용자로 구성된 세 개의 데이터 프레임이 있습니다. 사용자가 카메라 패닝을 수행하고 특정 시간 동안 데이터 프레임 이동이 감지 된 것처럼 특정 시간을 확인하기 위해 모든 데이터 프레임을 동시에 트래버스하고 싶습니다. 나는 대시를 사용하여 병렬 처리를 시도했지만 헛되지 않았습니다. 아래는 내 코드입니다.동시에 여러 데이터 프레임을 이동

import pandas as pd 
import glob 
import numpy as np 
import math 
from scipy.signal import butter, lfilter 
order=3 
fs=30 
cutoff=4.0 

data=[] 
gx=[] 
gy=[] 
g_x2=[] 
g_y2=[] 


dataList = glob.glob(r'C:\Users\chaitanya\Desktop\Thesis\*.csv') 
for csv in dataList: 
     data.append(pd.read_csv(csv)) 
for i in range(0, len(data)): 
    data[i] = data[i].groupby("Time").agg(lambda x: x.value_counts().index[0]) 
    data[i].reset_index(level=0, inplace=True) 

def butter_lowpass(cutoff,fs,order=5): 
    nyq=0.5 * fs 
    nor=cutoff/nyq 
    b,a=butter(order,nor,btype='low', analog=False) 
return b,a 
def lowpass_filter(data,cutoff,fs,order=5): 
    b,a=butter_lowpass(cutoff,fs,order=order) 
    y=lfilter(b,a,data) 
return y 

for i in range(0,len(data)): 
    gx.append(lowpass_filter(data[i]["Gyro_X"],cutoff,fs,order)) 
    gy.append(lowpass_filter(data[i]["Gyro_Y"],cutoff,fs,order)) 

    g_x2.append(gx[i]*gx[i]) 
    g_y2.append(gy[i]*gy[i]) 


g_rad=[[] for _ in range(len(data))] 
g_ang=[[] for _ in range(len(data))] 

for i in range(0,len(data)): 
    for j in range(0,len(data[i])): 
      g_ang[i].append(math.degrees(math.atan(gy[i][j]/gx[i][j]))) 


    data[i]["Ang"]=g_ang[i] 


panning=[[] for _ in range(len(data))] 
for i in range(0,len(data)): 
    for j in data[i]["Ang"]: 
     if 0-30<=j<=0+30: 
      panning[i].append("Panning") 
     elif 180-30<=j<=180+30: 
      panning[i].append("left") 
     else: 
      panning[i].append("None") 
    data[i]["Panning"]=panning[i] 
result=[[] for _ in range(len(data))] 
for i in range (0,len(data)): 
    result[i].append(data[i].loc[data[i]['Panning']=='Panning','Ang']) 
+0

를 통해 통해 도보로 진행할 수 있습니다 그래서 우리는 내 현재 코드를 추가 한 – jhole89

+0

와 함께 작동 할 수있는 출발점이있다. –

+1

이것은 잘못 형성된 질문입니다. 코드 외에도 작업중인 데이터의 예와 예상되는 내용을보고 싶습니다. 이 기사를 읽고 질문하는 방법에 대한 아이디어를 얻으십시오. http://stackoverflow.com/help/mcve http://stackoverflow.com/help/how-to-ask – piRSquared

답변

1

저는 여러분이 동시에 트래버스하기를 원합니다. 어떤 경우 든 세 개의 데이터 프레임에 통과하려는 차원의 인덱스가 있어야합니다.

나는 9 초 동안 임의의 초를 나타내는 행으로 3 개의 데이터 프레임을 생성합니다.

그런 다음이 간격을 마지막으로 알려진 데이터를 참조하려면 pd.concatffill으로 정렬하십시오.

seconds = pd.date_range('2016-08-31', periods=10, freq='S') 

n = 6 
ssec = seconds.to_series() 
sidx = ssec.sample(n).index 

df1 = pd.DataFrame(np.random.randint(1, 10, (n, 3)), 
        ssec.sample(n).index.sort_values(), 
        ['compass', 'accel', 'gyro']) 

df2 = pd.DataFrame(np.random.randint(1, 10, (n, 3)), 
        ssec.sample(n).index.sort_values(), 
        ['compass', 'accel', 'gyro']) 

df3 = pd.DataFrame(np.random.randint(1, 10, (n, 3)), 
        ssec.sample(n).index.sort_values(), 
        ['compass', 'accel', 'gyro']) 

df4 = pd.concat([df1, df2, df3], axis=1, keys=['df1', 'df2', 'df3']).ffill() 
df4 

enter image description here

당신이 다음 현재 코드를 입력하십시오 iterrows()

for tstamp, row in df4.iterrows(): 
    print tstamp 
+0

답변 해 주셔서 감사합니다. 행 반복에 문제가 있습니다. 인출 된 모든 행에 대해 1 초 동안 두 번째 행에 키 값을 반환하고 싶습니다. df1 & df3에는 나침반 값 4.0이 있으므로이 경우 df1 및 df3 인 같은 나침반 값을 가진 키를 반환하고 싶습니다. @piRSquared –

관련 문제