【问题标题】:subset pandas dataframe with corresponding numpy array具有相应 numpy 数组的子集 pandas 数据帧
【发布时间】:2016-04-15 14:43:55
【问题描述】:

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

【问题讨论】:

  • 为什么不直接删除重复项? df.drop_duplicates()?
  • 或者你可以做df.groupby('order_id').first().reset_index()
  • 至于您尝试失败的原因,通过传递 isin 您正在测试成员资格,因此无论如何它都会返回所有行,因为每个 order_id 都存在行

标签: python numpy pandas


【解决方案1】:

你可以使用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 建议

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 2019-09-23
    • 2020-08-18
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2016-01-16
    相关资源
    最近更新 更多