我们有来自测量多个部件的设备的数据,并将每个部件的多个测量结果输出到一个 CSV 文件中。我们将 CSV 文件读入具有如下结构的数据帧:
PartNo 12
Meas1 45
Meas2 23
!END
PartNo 13
Meas1 63
Meas2 73
!END
PartNo 12
Meas1 82
Meas2 84
!END
“!END”标志表示一个部分的数据在哪里结束,下一个部分从哪里开始。我们想重塑数据,使其看起来像:
PartNo Meas1 Meas2
12 45 23
13 63 73
12 82 84
(请注意,一个部分可能出现不止一次 - 因此没有字段保证在所有记录中都是唯一的。)
枢轴产生:
0 !END Meas1 Meas2 PartNo
0 NaN NaN NaN 12.0
1 NaN 45.0 NaN NaN
2 NaN NaN 23.0 NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN 13.0
5 NaN 63.0 NaN NaN
6 NaN NaN 73.0 NaN
7 NaN NaN NaN NaN
8 NaN NaN NaN 12.0
9 NaN 82.0 NaN NaN
10 NaN NaN 84.0 NaN
11 NaN NaN NaN NaN
我如何压缩这些行以按 PartNo 分组?
转置产生:
0 1 2 3 4 5 6 7 8 9 10 11
0 PartNo Meas1 Meas2 !END PartNo Meas1 Meas2 !END PartNo Meas1 Meas2 !END
1 12 45 23 NaN 13 63 73 NaN 12 82 84 NaN
我怎样才能每第 4 个项目重置该行?
我可以在原始数据框中创建一个新的索引列,然后遍历行,使用 !END 为每一行递增索引(然后使用索引对数据进行分组),但似乎应该有一个更优雅的方法变形函数来处理这种情况,或者可能有一个 Pivot 或 Transpose 的参数可以处理这种情况。我是 Python 初学者。这是完整的代码:
import pandas as pd
from io import StringIO
tdata = (
'PartNo, 12\n'
'Meas1, 45\n'
'Meas2, 23\n'
'!END\n'
'PartNo, 13\n'
'Meas1, 63\n'
'Meas2, 73\n'
'!END\n'
'PartNo, 12\n'
'Meas1, 82\n'
'Meas2, 84\n'
'!END\n')
tdf = pd.read_csv(StringIO(tdata), header=None)
print(tdf)
print(tdf.pivot(index=None, columns=0, values=1))
print(tdf.T)
当年话下
皈依舞
GCT1015
墨色风雨
相关分类