Skip to main content
 首页 » 编程设计

python之如何对数据表中重复的测量值进行排序

2025年05月04日20qq78292959

我在生产线上有一个测量值,例如:

import pandas as pd 
import random 
random.seed(2) 
df = pd.DataFrame() 
df['col1_date'] = pd.date_range('2018-09-01', periods=40, freq='D') 
df['col2_id'] = pd.DataFrame(list(['A', 'B', 'C', 'D'] *10)) 
df['MeasuredValues'] = np.random.choice(10, 40) 
df 

基本上,项目(例如 ['A'、'B'、'C'、'D'])在生产线取得进展时会针对某些参数进行测量。我正在尝试在表中添加一列,为 col2_id 中的每个项目提供 一系列测量,例如:首先测量时,我得到 1st measurement,然后对于第二次测量,我得到 2nd measurement 等等。我可以通过对 col2_id 进行排序然后按 col1_date 对 excel 中包含 100 行的小表进行手动操作。显然,对于数千行的大量行来说,它没有多大意义。然后我可以比较 col2_id 中所有项目的不同测量值。我不太了解如何在 Pandas 或 Python 中执行此操作。

谁能给我一些建议?

请您参考如下方法:

如果您的日期已排序,您可以使用 cumcount 来完成此操作:

df['measurement_number'] = 'measurement '+(df.groupby('col2_id').cumcount()+1).astype(str) 

或者:

df['measurement_number'] = (df.groupby('col2_id').cumcount()+1).map(lambda x: f'measurement {x}') 

两者都给你:

>>> df 
    col1_date col2_id  MeasuredValues measurement_number 
0  2018-09-01       A               8      measurement 1 
1  2018-09-02       B               8      measurement 1 
2  2018-09-03       C               6      measurement 1 
3  2018-09-04       D               2      measurement 1 
4  2018-09-05       A               8      measurement 2 
5  2018-09-06       B               7      measurement 2 
6  2018-09-07       C               2      measurement 2 
7  2018-09-08       D               1      measurement 2 
8  2018-09-09       A               5      measurement 3 
9  2018-09-10       B               4      measurement 3 
10 2018-09-11       C               4      measurement 3 
11 2018-09-12       D               5      measurement 3 
12 2018-09-13       A               7      measurement 4 
13 2018-09-14       B               3      measurement 4 
14 2018-09-15       C               6      measurement 4 
15 2018-09-16       D               4      measurement 4 
16 2018-09-17       A               3      measurement 5 
17 2018-09-18       B               7      measurement 5 
18 2018-09-19       C               6      measurement 5 
19 2018-09-20       D               1      measurement 5 
20 2018-09-21       A               3      measurement 6 
21 2018-09-22       B               5      measurement 6 
22 2018-09-23       C               8      measurement 6 
23 2018-09-24       D               4      measurement 6 
24 2018-09-25       A               6      measurement 7 
25 2018-09-26       B               3      measurement 7 
26 2018-09-27       C               9      measurement 7 
27 2018-09-28       D               2      measurement 7 
28 2018-09-29       A               0      measurement 8 
29 2018-09-30       B               4      measurement 8 
30 2018-10-01       C               2      measurement 8 
31 2018-10-02       D               4      measurement 8 
32 2018-10-03       A               1      measurement 9 
33 2018-10-04       B               7      measurement 9 
34 2018-10-05       C               8      measurement 9 
35 2018-10-06       D               2      measurement 9 
36 2018-10-07       A               9     measurement 10 
37 2018-10-08       B               8     measurement 10 
38 2018-10-09       C               7     measurement 10 
39 2018-10-10       D               1     measurement 10 

如果您的日期未排序,请先对它们进行排序。与上述相同,但使用:

df.sort_values('col1_date') 

首先。