[英]How Calculate Speed in Pandas Dataframe
我的數據有問題。 我想基於“速度方程式”分析速度。
我的數據是這樣的:
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
您介意幫助我如何轉換數據或更好的分析速度的方法。 先感謝您。
您可以將代碼的最后部分替換為:
rows =[]
for i in range(1, 7):
for x in range(3):
v_2(i)
v(i)
row = [v(i), i+1, x+1]
rows.append(row)
df1 = pd.DataFrame(rows, columns=['v', 'i', 'ID'])
df2 = pd.pivot_table(df1, values = 'v', index=['ID'], columns = 'i').reset_index()
df2.columns = ['MAC','V1','V2','V3','V4','V5','V6']
df2.set_index('MAC', inplace=True)
print df2
輸出:
V1 V2 V3 V4 V5 V6
MAC
1 0.0 1.0 1.0 0.0 1.0 1.0
2 0.0 1.0 0.0 1.0 1.0 1.0
3 1.0 1.0 0.0 1.0 1.0 1.0
在示例代碼中,您並沒有在任何地方創建數據框...只是在打印輸出: print((f"v:{v(i)}",f"i:{i+1}",f"ID:{x+1}"))
。
一種簡單的方法是使用您的數據創建一個字典(即使我不理解您想在其中存儲什么數據...),然后創建一個數據框:
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)
同樣,我並沒有真正理解最終數據幀中的內容,但是以上提示足以解決問題。
我嘗試此代碼可能接近我的預期結果:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.