简体   繁体   English

根据要搜索的优先级值列表从数据框中返回行

[英]Return row from a dataframe according to a list of priority values to search

I have a list of values in a sequence from most important to least important, if it doesn't find a value, it searches for the next one and so on:我有一个按从最重要到最不重要的顺序排列的值列表,如果找不到值,它会搜索下一个值,依此类推:

import pandas as pd

markets_base = [
        'Over/Under 8.5 Goals','First Half Goals 1.5','Over/Under 4.5 Goals','First Half Goals 0.5'
        ]

markets_df = pd.DataFrame({
    'competition': ['a','b','c'],
    'market_name': ['First Half Goals 1.5','Over/Under 4.5 Goals','First Half Goals 0.5']
    })

for mkt_base in markets_base:
    if len(markets_df.loc[markets_df['market_name'] == mkt_base]) > 0:
        final_row = markets_df.loc[markets_df['market_name'] == mkt_base].iloc[:1]
        break

print(final_row)

Is there a more professional way to the same result or is this the correct model?是否有更专业的方法来获得相同的结果,或者这是正确的模型?

A possible solution involves turning your 'market_name' column into categorical as explained in this answer: Custom sorting in pandas dataframe一个可能的解决方案涉及将您的“market_name”列转换为分类,如此答案中所述: Custom sort in pandas dataframe

In your case this would do the trick:在您的情况下,这可以解决问题:

import pandas as pd

markets_df = pd.DataFrame({
    'competition': ['a', 'b', 'c', 'd', 'e'],
    'market_name': ['First Half Goals 1.5', 'Over/Under 4.5 Goals', 'First Half Goals 0.5', 'Over/Under 8.5 Goals', 'Over/Under 4.5 Goals']
})
markets_base = [
    'Over/Under 8.5 Goals', 'First Half Goals 1.5', 'Over/Under 4.5 Goals', 'First Half Goals 0.5'
]

#here's the thing
markets_df["market_name"] = pd.Categorical(
    markets_df['market_name'], markets_base)

final_row = markets_df.sort_values("market_name").iloc[:1]
print(final_row)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM