python - 有没有更快的替代方法来获取 DataFrame 的子集?

标签 python pandas loops dataframe

我目前正在编写一些Python代码,我试图检索DataFrame的子集,其中列值等于某个值。我这样做是这样的:

for i in brands.index:
    current_brand = brands.get_value(i, 'Car Brand')
    my_dataframe_subset = my_dataframe[my_dataframe['Brand'] == current_brand]  

这当然可以用于制作子集,但我在循环中连续执行此操作数千次。我发现这是我的执行速度的一个巨大瓶颈,但不幸的是“current_brand”改变了循环的每次迭代,所以我没有看到其他方法。有没有更快的替代方法来获取这个子集,而不会造成如此大的延迟?

谢谢

编辑: 这是我的代码正在做什么的更现实的示例。显然这些数据是胡言乱语,但我希望你能明白:

------------------------
|Person | Car Brand |
|------------------------
|'dave' | 'Toyota'  |
|'mike' | 'Ford'    |
|'sally'| 'Ford'    |
|'doug' | 'BMW'     |
------------------------
my_list = []
for i in brands.index:
    current_person = brands.get_value(i, 'Person')
    current_brand = brands.get_value(i, 'Car Brand')
    my_dataframe_subset = my_dataframe[my_dataframe['Brand'] == current_brand] 

    for i_b in my_dataframe_subset.index:
        #do stuff with current_person and current_brand
        car_colour = my_dataframe_subset(i_b, 'Colour')
        car_speed = my_dataframe_subset(i_b, 'Speeds')
        my_dict = {'person': current_person, 'brand': current_brand, 'colour': car_colour, 'speed': car_speed}
        my_list.append(my_dict)

最佳答案

我认为需要merge使用默认内部联接:

brands = pd.DataFrame({
        'Person': ['dave', 'mike', 'sall', 'doug'], 
        'Car Brand': ['Kia', 'Ford', 'Ford', 'BMW']
})

my_dataframe = pd.DataFrame({
        'Brand':['Toyota','Toyota','BMW', 'BMW', 'BMW', 'Ford'],
         'Speeds':[40,50,20,10,30,40],
         'Colour':list('abcdef')
})
print (my_dataframe)
    Brand  Speeds Colour
0  Toyota      40      a
1  Toyota      50      b
2     BMW      20      c
3     BMW      10      d
4     BMW      30      e
5    Ford      40      f

d = {'Car Brand':'Brand'}
df = brands.rename(columns=d).merge(my_dataframe, on='Brand')
print (df)
  Person Brand  Speeds Colour
0   mike  Ford      40      f
1   sall  Ford      40      f
2   doug   BMW      20      c
3   doug   BMW      10      d
4   doug   BMW      30      e

如果需要字典列表:

my_list = df.to_dict(orient='records')

关于python - 有没有更快的替代方法来获取 DataFrame 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52510752/

相关文章:

c# - 如何用 LINQ 替换嵌套循环 - 以一种干净、可管理的方式

python - 在两个 pandas DataFrame 之间执行适当的连接操作

python - 为什么首先分配给变量时 pandas.dataframe.groupby 更快?

python - 使用 Blaze 包查找特定行的有效方法?

java - 如何退出 Java 中的 do while 循环?

python - 当每个循环读取上一个循环的结果时优化Python循环

python - 在python中搜索无效字符的有效方法

python - 字节到字符串的转换

python - argparse 可以接受参数值作为 key=val 对吗

python - 删除顶行 2 行并将成绩单放在下面