我目前正在编写一些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/