首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时遍历多个数据帧

同时遍历多个数据帧
EN

Stack Overflow用户
提问于 2016-09-07 21:28:20
回答 1查看 252关注 0票数 0

我有三个用户的三个数据帧,具有相同的列名,如时间、指南针数据、加速计数据、陀螺仪数据和相机平移信息。我希望同时遍历所有数据帧,以检查哪个用户执行了相机平移的特定时间,并返回该用户(例如,在其中检测到特定时间的数据帧平移)。我曾尝试使用dash来实现并行性,但徒劳无功。下面是我的代码

代码语言:javascript
复制
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'])
EN

回答 1

Stack Overflow用户

发布于 2016-09-07 23:10:00

我将假设你想要在时间上同时穿越。在任何情况下,您都希望您的三个数据帧在要遍历的维度中有一个索引。

我将生成3个数据帧,其中的行表示9秒内的随机秒。

然后,我将把它们与pd.concatffill对齐,以便能够引用任何差距的最新已知数据。

代码语言:javascript
复制
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

然后,您可以继续通过iterrows()漫游

代码语言:javascript
复制
for tstamp, row in df4.iterrows():
    print tstamp
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39371228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档