質問編集履歴
1
改良後のソースコードを追加
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -93,4 +93,57 @@ | |
| 93 93 |  | 
| 94 94 |  | 
| 95 95 |  | 
| 96 | 
            -
            Python初めて2日程度なので、Pythonらしく直していただいて構いません。
         | 
| 96 | 
            +
            Python初めて2日程度なので、Pythonらしく直していただいて構いません。
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            ### 改良後のソースコード
         | 
| 99 | 
            +
            lehshellさんから改良案を頂き、そのあたりで自分で調べた結果もふまえて書き換えたコードを以下においておきます。
         | 
| 100 | 
            +
            shiftメソッドの他に、diffでもできるみたいです。
         | 
| 101 | 
            +
             | 
| 102 | 
            +
             | 
| 103 | 
            +
            ```Python
         | 
| 104 | 
            +
            import pandas as pd
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            def length(pos1,pos2):
         | 
| 107 | 
            +
                ans = ((pos1.x - pos2.x) **2 + (pos1.y - pos2.y) **2 + (pos1.z - pos2.z) **2)** 0.5
         | 
| 108 | 
            +
                return ans
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            def length2(diffx,diffy,diffz):
         | 
| 111 | 
            +
                ans = (diffx ** 2 + diffy ** 2 + diffz ** 2) ** 0.5
         | 
| 112 | 
            +
                return ans
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            def method1(): #改良前
         | 
| 115 | 
            +
                df = pd.read_excel('test2.xlsx')
         | 
| 116 | 
            +
                lastvar = 0
         | 
| 117 | 
            +
                df['df_time'] = 0
         | 
| 118 | 
            +
                df['len'] = 0.0
         | 
| 119 | 
            +
                df['spd'] = 0.0
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                for item in df.itertuples():
         | 
| 122 | 
            +
                    if (hasattr(lastvar, 'Time')):
         | 
| 123 | 
            +
                        diff = item.Time - lastvar.Time
         | 
| 124 | 
            +
                        len =  length(item,lastvar)
         | 
| 125 | 
            +
                        df.at[item.Index, 'df_time'] = diff
         | 
| 126 | 
            +
                        df.at[item.Index, 'len']    = len
         | 
| 127 | 
            +
                        df.at[item.Index, 'spd']    = len / diff * 1000
         | 
| 128 | 
            +
                    lastvar = item
         | 
| 129 | 
            +
                print(df)
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            def method2(): #改良案1
         | 
| 132 | 
            +
                df = pd.read_excel('test2.xlsx')
         | 
| 133 | 
            +
                df['df_time'] = (df['Time'] - df['Time'].shift(1)).fillna(0)
         | 
| 134 | 
            +
                df['len'] = length(df, df.shift(1)).fillna(0)
         | 
| 135 | 
            +
                df['spd'] = (df['len'] / df['df_time'] * 1000).fillna(0)
         | 
| 136 | 
            +
                print(df)
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            def method3(): #改良案2
         | 
| 139 | 
            +
                df = pd.read_excel('test2.xlsx')
         | 
| 140 | 
            +
                df['df_time'] = df['Time'].diff().fillna(0)
         | 
| 141 | 
            +
                df['len'] = length2(df["x"].diff(),df["y"].diff(),df["z"].diff()).fillna(0)
         | 
| 142 | 
            +
                df['spd'] = (df['len'] / df['df_time'] * 1000).fillna(0)
         | 
| 143 | 
            +
                print(df)
         | 
| 144 | 
            +
             | 
| 145 | 
            +
             | 
| 146 | 
            +
            method1()
         | 
| 147 | 
            +
            method2()
         | 
| 148 | 
            +
            method3()
         | 
| 149 | 
            +
            ```
         | 
