我有以下表格的数据:
p q r y_1 y_2 y_3 y_4 y_5 y_6 y_7
2 8 14 0748 0748 0748 0790 0804 0818 0832
2 9 22 1262 1262 1262 1328 1350 1372 1394
1 5 19 0512 0512 0512 0569 0588 0607 0626
2 7 19 0748 0748 0748 0805 0824 0843 0862
3 11 13 1608 1608 1608 1647 1660 1673 1686
2 7 20 0788 0788 0788 0848 0868 0888 0908
1 4 15 0310 0310 0310 0355 0370 0385 0400
3 12 17 2130 2130 2130 2181 2198 2215 2232
1 4 14 0280 0280 0280 0322 0336 0350 0364
1 5 20 0552 0552 0552 0612 0632 0652 0672
2 7 17 0674 0674 0674 0725 0742 0759 0776
3 10 13 1276 1276 1276 1315 1328 1341 1354
3 11 20 1846 1846 1846 1906 1926 1946 1966
3 11 14 1636 1636 1636 1678 1692 1706 1720
1 6 18 0566 0566 0566 0620 0638 0656 0674
3 12 16 2096 2096 2096 2144 2160 2176 2192
2 9 21 1218 1218 1218 1281 1302 1323 1344
3 10 19 1474 1474 1474 1531 1550 1569 1588
2 8 13 0720 0720 0720 0759 0772 0785 0798
1 6 22 0730 0730 0730 0796 0818 0840 0862
1 4 13 0252 0252 0252 0291 0304 0317 0330
2 8 15 0778 0778 0778 0823 0838 0853 0868
3 12 15 2064 2064 2064 2109 2124 2139 2154
3 10 16 1366 1366 1366 1414 1430 1446 1462
2 9 16 1028 1028 1028 1076 1092 1108 1124
1 5 16 0404 0404 0404 0452 0468 0484 0500
1 6 21 0686 0686 0686 0749 0770 0791 0812
我想用NumPy对这些数组进行排序,并根据q的相同值将数据分组为变量,如下所示:
1 4 13 0252 0252 0252 0291 0304 0317 0330
q_a 1 4 14 0280 0280 0280 0322 0336 0350 0364
1 4 15 0310 0310 0310 0355 0370 0385 0400
--------------------------------------------------------------------
1 5 16 0404 0404 0404 0452 0468 0484 0500
q_b 1 5 19 0512 0512 0512 0569 0588 0607 0626
1 5 20 0552 0552 0552 0612 0632 0652 0672
--------------------------------------------------------------------
1 6 18 0566 0566 0566 0620 0638 0656 0674
q_c 1 6 21 0686 0686 0686 0749 0770 0791 0812
1 6 22 0730 0730 0730 0796 0818 0840 0862
--------------------------------------------------------------------
2 7 17 0674 0674 0674 0725 0742 0759 0776
q_d 2 7 19 0748 0748 0748 0805 0824 0843 0862
2 7 20 0788 0788 0788 0848 0868 0888 0908
--------------------------------------------------------------------
2 8 13 0720 0720 0720 0759 0772 0785 0798
q_e 2 8 14 0748 0748 0748 0790 0804 0818 0832
2 8 15 0778 0778 0778 0823 0838 0853 0868
--------------------------------------------------------------------
2 9 16 1028 1028 1028 1076 1092 1108 1124
q_f 2 9 21 1218 1218 1218 1281 1302 1323 1344
2 9 22 1262 1262 1262 1328 1350 1372 1394
--------------------------------------------------------------------
3 10 13 1276 1276 1276 1315 1328 1341 1354
q_g 3 10 16 1366 1366 1366 1414 1430 1446 1462
3 10 19 1474 1474 1474 1531 1550 1569 1588
--------------------------------------------------------------------
3 11 13 1608 1608 1608 1647 1660 1673 1686
q_h 3 11 14 1636 1636 1636 1678 1692 1706 1720
3 11 20 1846 1846 1846 1906 1926 1946 1966
--------------------------------------------------------------------
3 12 15 2064 2064 2064 2109 2124 2139 2154
q_i 3 12 16 2096 2096 2096 2144 2160 2176 2192
3 12 17 2130 2130 2130 2181 2198 2215 2232
我仍然在努力根据q的值对数据进行分组。到目前为止,我的努力只能整理数据:
import numpy as np
data = open('data.dat', "r")
line = data.readline()
while line.startswith('#'):
line = data.readline()
data_header = line.split("\t")
data_header[-1] = data_header[-1].strip()
_data_ = np.genfromtxt(data, comments='#', delimiter='\t', names = data_header, dtype = None, unpack = True).transpose()
sorted_index = np.lexsort((_data_['r'], _data_['q'], _data_['p']))
_data_ = _data_[sorted_index]
p_ind = np.nonzero(np.diff(_data_['p']))[0]
q_ind = np.nonzero(np.diff(_data_['q']))[0]
r_ind = np.nonzero(np.diff(_data_['r']))[0]
n_p = len(np.nonzero(np.diff(_data_['p']))[0]) + 1
n_q = len(np.nonzero(np.diff(_data_['q']))[0]) + 1
n_r = len(np.nonzero(np.diff(_data_['r']))[0]) + 1
NumPy / SciPy中是否有可以根据值对数据进行分组的功能?
答案 0 :(得分:0)
我不确定这是你在寻找什么,但它可能会有所帮助。
使用pandas.DataFrame存储数据,然后使用选项groupby
import pandas as pd
import numpy as np
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.choice(8), 'D' : np.random.choice(8)})
list(df.groupby(['A', 'B'])