我有一个 CSV 文件,有 4 列,其中包含轨道的 x、y 位置。 第一列是轨道的 ID。第二列是时间。第 3 个和第 4 个是 X 和 Y 坐标。
现在 X 和 Y 位置随着时间(第 2 列)从 1 变化到 39。我编写了函数(带有 for 循环)来计算 X 和 Y 的均方位移 (MSD),作为时间的函数(第 2 列) ).
但是,我想创建一个“for”循环,其中代码可以识别 ID#(来自第 1 列),计算上述第一条轨道的 X 和 Y 的 MSD 作为时间范围的函数。然后对第 1 列中的第 2 轨重复此任务,依此类推。最终,将所有这些数据写入 csv。
这将是一个嵌套的 for 循环,其中对于 col#1 中的每个 track#,它将计算 MSD 值。
希望问题陈述清楚。
为了简化,我提供 ID#1 和 ID#2 的数据。
[ID Time X Y
1 0 1601.335544 496.4608855
1 1 1581.838184 497.3440951
1 2 1574.051153 493.2139985
1 3 1559.965258 504.9056873
1 4 1559.163646 493.4245832
1 5 1552.987661 494.2848072
1 6 1548.432535 497.3584389
1 7 1538.938784 495.0417267
1 8 1531.85109 489.0665788
1 9 1513.806745 504.7704007
1 10 1510.326674 497.5994863
1 11 1504.674908 506.2031946
1 12 1501.314024 509.9807796
1 13 1486.108431 530.8405735
1 14 1478.028873 528.9872163
1 15 1461.280431 555.1810352
1 16 1457.827357 544.1238295
1 17 1438.153357 546.1896118
1 18 1432.669134 536.079993
1 19 1421.693967 539.1976368
1 20 1420.047558 531.8360775
1 21 1407.484016 552.6212932
1 22 1401.323039 542.387526
1 23 1392.214888 550.167287
1 24 1383.369105 538.1534221
1 25 1376.908441 563.2408666
1 26 1375.965296 552.1877753
1 27 1356.164381 565.6603602
1 28 1350.494881 554.3032903
1 29 1343.425562 554.2145022
1 30 1338.147555 543.5654733
1 31 1319.226209 549.3667058
1 32 1315.186512 544.1423621
1 33 1304.524207 559.4354187
1 34 1307.192095 545.9207145
1 35 1297.79372 555.0278485
1 36 1293.623393 548.495482
1 37 1272.472404 556.9643619
1 38 1267.257919 553.4317279
1 39 1256.48484 564.7547876
2 0 1938.04852 502.2096272
2 1 1910.274979 499.4121209
2 2 1905.602566 494.564121
2 3 1892.023117 500.8674278
2 4 1890.41268 497.2568435
2 5 1889.370728 497.1678774
2 6 1879.222251 493.4259324
2 7 1854.213543 505.9090132
2 8 1849.009713 506.4718795
2 9 1827.907196 521.1249766
2 10 1825.557874 513.5055768
2 11 1811.655479 514.9185746
2 12 1804.375201 506.0495205
2 13 1790.033474 520.9751489
2 14 1782.406459 512.8187715
2 15 1768.6465 528.522878
2 16 1767.990804 526.0058206
2 17 1761.603106 535.8145984
2 18 1753.677501 517.6532347
2 19 1747.538543 539.0509296
2 20 1746.84304 531.1623969
2 21 1742.643159 543.8348459
2 22 1736.949154 534.7801535
2 23 1729.319064 542.8045771
2 24 1724.696825 533.3967561
2 25 1704.024318 549.7868714
2 26 1692.312454 544.4582317
2 27 1686.267143 547.7829218
2 28 1673.865039 545.091512
2 29 1662.986818 562.5577513
2 30 1656.270704 562.4002987
2 31 1642.961381 568.3286907
2 32 1643.388565 563.512262
2 33 1631.965059 570.7782627
2 34 1634.874901 563.7563826
2 35 1622.105795 574.0527937
2 36 1616.78351 569.5772635
2 37 1611.596229 576.4976228
2 38 1608.866078 567.6358896
2 39 1591.533636 576.2326799]
这是我用于从 X 和 Y 计算 MSD 的 for 循环。
def calc_msd_np(x):
msd = []
for s in range(1,len(x)):
dx = x[s:] - x[:-s]
msd.append(np.average(dx**2))
return msd
print(calc_msd_np(x))
同样,我对 Y 坐标使用 for 循环。基本上,X 和 Y 的 MSD 需要针对每个 ID 进行迭代。
我对此很陌生,所以弄清楚嵌套循环非常具有挑战性。
首先将您的 csv 转换为 pandas
df = pd.read_csv("yourcsv")
其次,定义一个名为 MSD 的新列并定义 MSD 的公式。
df["MSD"] = #MSD formula
删除 x 、 y 和时间列。
new_df=df.drop(columns=["x","y","time"],axis=1)
将您的 pandas 转换为 csv。
new_df.to_csv("final.csv")