子集pandas数据帧与相应的numpy数组

时间:2016-01-11 10:19:58

标签: python numpy pandas

我有一个包含以下列的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行。哪里出错了?请帮忙

1 个答案:

答案 0 :(得分:2)

您可以使用pd.pivot_tableorder_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建议