2016-09-07 182 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

我打算假設你想要在時間上同時遍歷。無論如何,你都希望你的三個數據框在你想要遍歷的維度中有一個索引。

我會生成3個數據幀,並在9秒內產生表示隨機秒數的行。

然後,我會將它們與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

謝謝你的回答。我在遍歷行時遇到問題。對於每一個取得的行,我想返回鍵值,例如在第一行第一行df1&df3的羅盤值爲4.0,所以我想返回具有相同羅盤值的鍵,在這種情況下是df1&df3。 @piRSquared –