我有一个包含以下列的pandas数据框。
order_id latitude
0 519 19.119677
1 519 19.119677
2 520 19.042117
3 520 19.042117
4 520 19.042117
5 521 19.138245
6 523 19.117662
7 523 19.117662
8 523 19.117662
9 523 19.117662
10 523 19.117662
11 524 19.137793
12 525 19.119372
13 526 0.000000
14 526 0.000000
15 526 0.000000
16 527 19.133430
17 528 0.000000
18 529 19.118284
19 530 0.000000
20 531 19.114269
21 531 19.114269
22 532 19.136292
23 533 19.119075
24 533 19.119075
25 533 19.119075
26 534 19.119677
27 535 19.119677
28 535 19.119677
29 535 19.119677
order_id重复,我想要唯一的order_id值,我可以通过
获得unique_order_id = pd.unique(tsp_data['order_id'])
array(['519', '520', '521', '523', '524', '525', '526', '527', '528',
'529', '530', '531', '532', '533', '534', '535'], dtype=object)
这会返回正确的唯一值。我将它存储在unique_order_id变量中。现在我只想要唯一的order_id值的相应lat值。
我正在做这样的事情。
tsp_data['latitude'][tsp_data['order_id'].isin(unique_order_id)]
但是它返回了我所有的30行。哪里出错了?请帮忙
答案 0 :(得分:2)
您可以使用pd.pivot_table
,order_id
将返回第一个值:
In [184]: tsp_data.pivot_table(index='order_id', values='latitude')
Out[184]:
order_id
519 19.119677
520 19.042117
521 19.138245
523 19.117662
524 19.137793
525 19.119372
526 0.000000
527 19.133430
528 0.000000
529 19.118284
530 0.000000
531 19.114269
532 19.136292
533 19.119075
534 19.119677
535 19.119677
Name: latitude, dtype: float64
或者您可以使用drop_duplicates
:
In [185]: tsp_data.drop_duplicates(subset=['order_id'])
Out[185]:
order_id latitude
0 519 19.119677
2 520 19.042117
5 521 19.138245
6 523 19.117662
11 524 19.137793
12 525 19.119372
13 526 0.000000
16 527 19.133430
17 528 0.000000
18 529 19.118284
19 530 0.000000
20 531 19.114269
22 532 19.136292
23 533 19.119075
26 534 19.119677
27 535 19.119677
或@ groupby
@EdChum建议