gpt4 book ai didi

python - 将数据框与排序标准合并

转载 作者:行者123 更新时间:2023-12-01 03:06:12 25 4
gpt4 key购买 nike

previous question中,我问如何匹配此 DataFrame source 中的值:

     car_id     lat     lon
0 100 10.0 15.0
1 100 12.0 10.0
2 100 13.0 09.0
3 110 23.0 08.0
4 110 13.0 09.0
5 110 12.0 10.0
6 110 12.0 02.0
7 120 11.0 11.0
8 120 12.0 10.0
9 120 13.0 09.0
10 120 14.0 08.0
11 130 12.0 10.0

并仅保留那些坐标位于第二个 DataFrame coords 中的坐标:

     lat     lon
0 12.0 10.0
1 13.0 09.0

但这一次我想匹配每个得到的car_id:

  • 来自坐标的所有值
  • 顺序相同

因此生成的 DataFrame 结果 将是:

     car_id
1 100
2 120

# 110 has all the values from coords, but not in the same order
# 130 doesn't have all the values from coords

有没有办法以矢量化的方式实现这个结果,避免经历大量的循环和条件?

最佳答案

计划

  • 我们将groupby 'car_id'并评估每个子集
  • 内部 合并之后,我们应该看到两件事
    1. 生成的合并数据框应具有与坐标相同的值
    2. 生成的合并数据框应涵盖所有内容
<小时/><小时/><小时/>
def duper(df):
m = df.merge(coords)
c = pd.concat([m, coords])
# we put the merged rows first and those are
# the ones we'll keep after `drop_duplicates(keep='first')`
# `keep='first'` is the default, so I don't pass it
c1 = (c.drop_duplicates().values == coords.values).all()

# if `keep=False` then I drop all duplicates. If I got
# everything in `coords` this should be empty
c2 = c.drop_duplicates(keep=False).empty
return c1 & c2

source.set_index('car_id').groupby(level=0).filter(duper).index.unique().values

array([100, 120])

轻微替代

def duper(df):
m = df.drop('car_id', 1).merge(coords)
c = pd.concat([m, coords])
c1 = (c.drop_duplicates().values == coords.values).all()
c2 = c.drop_duplicates(keep=False).empty
return c1 & c2

source.groupby('car_id').filter(duper).car_id.unique()

关于python - 将数据框与排序标准合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43399506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com