如何计算Pandas Dataframe中的速度

时间:2018-02-26 10:14:45

标签: python pandas dataframe jupyter-notebook

我的数据存在问题。我想根据"速度方程分析速度。"

enter image description here

我的数据如下:

df

MAC T_1 X_1 Y_1 T_2 X_2 Y_2 T_3 X_3 Y_3 T_4 X_4 Y_4 T_5 X_5 Y_5 T_6 X_6 Y_6 T_7 X_7 Y_7
ID1 1   1   1   1   1   1   2   1   2   3   1   3   3   1   3   4   1   4   5   1   5
ID2 6   2   5   6   2   5   7   3   5   7   3   5   8   4   5   9   5   5   10  5   4
ID3 1   1   1   2   1   2   3   1   3   3   1   3   4   1   4   5   1   5   6   2   5

我尝试使用我的代码计算速度:

df = pd.read_csv("data.csv") #read data
def v_2(i):
     return (df.ix[x,(5+3*(i-1))]-df.ix[x,(2+3*(i-1))])**2 + (df.ix[x,(6+3*(i-1))]-df.ix[x,(3+3*(i-1))])**2

def v(i):
    if (df.ix[x,(4+3*(i-1))]-df.ix[x,(1+3*(i-1))]) ==0:
       return 0
    else:
        return math.sqrt(v_2(i)) / (df.ix[x,(4+3*(i-1))]-df.ix[x,(1+3*(i-1))]) 
for i in range(1,7):
    for x in range(3):
        v_2(i)
        v(i)
        print((f"v:{v(i)}",f"i:{i+1}",f"ID:{x+1}"))

目前的结果显示如下:

('v:0', 'i:2', 'ID:1')
('v:0', 'i:2', 'ID:2')
('v:1.0', 'i:2', 'ID:3')
('v:1.0', 'i:3', 'ID:1')
('v:1.0', 'i:3', 'ID:2')
('v:1.0', 'i:3', 'ID:3')
('v:1.0', 'i:4', 'ID:1')
('v:0', 'i:4', 'ID:2')
('v:0', 'i:4', 'ID:3')
('v:0', 'i:5', 'ID:1')
('v:1.0', 'i:5', 'ID:2')
('v:1.0', 'i:5', 'ID:3')
('v:1.0', 'i:6', 'ID:1')
('v:1.0', 'i:6', 'ID:2')
('v:1.0', 'i:6', 'ID:3')
('v:1.0', 'i:7', 'ID:1')
('v:1.0', 'i:7', 'ID:2')
('v:1.0', 'i:7', 'ID:3')

我的预期结果pd.Dataframe如下:

MAC V1  V2  V3  V4  V5  V6
ID1 0   1   1   0   1   1
ID2 0   1   0   1   1   1
ID3 1   1   0   1   1   1

您是否介意帮助我如何转换数据或更好地分析速度。提前谢谢。

2 个答案:

答案 0 :(得分:0)

在您的示例代码中,您没有在任何地方创建Dataframe ...您只是打印出来:print((f"v:{v(i)}",f"i:{i+1}",f"ID:{x+1}"))

一种简单的方法是使用您的数据创建一个字典(即使我不理解您要在其中存储哪些数据......)然后创建一个Dataframe:

data = {'MAC':[], 'V1':[], 'V2':[], 'V3':[], 'V4':[], 'V5':[], 'V6':[],}
for i in range(1,7):
    for x in range(3):
        data['MAX'].append('ID{}'.format(x+1))
        data['V{}'.format(i)].append(v(i))
        # do not know where to store v_2(i)
df = pandas.Dataframe(data)

我再也不明白你的最终数据框中有什么内容,但上面的提示应该足以让你解决问题。

答案 1 :(得分:0)

我尝试此代码可能接近我的预期结果:

def v_2(i):
     return (df.ix[x,(5+3*(i-1))]-df.ix[x,(2+3*(i-1))])**2 + (df.ix[x,(6+3*(i-1))]-df.ix[x,(3+3*(i-1))])**2

def v(i):
    if (df.ix[x,(4+3*(i-1))]-df.ix[x,(1+3*(i-1))]) ==0:
       return 0
    else:
       return math.sqrt(v_2(i)) / (df.ix[x,(4+3*(i-1))]-df.ix[x,(1+3*(i-1))]) 
df = pd.read_csv("data.csv") 
df_result = pd.DataFrame()
for i in range(1,int((len(df.columns)-1)/3)):
    v_result = list()
    for x in range(len(df.index)):
        v_2(i)
        v(i)
        v_result.append(v(i))
  df_result[i]=v_result
df_result.columns = ['V_{}'.format(int(i)+1) for i in df_result.columns]
df_result.index = ['ID_{}'.format(int(i)+1) for i in df_result.index]
df_result