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:
JavaScript
x
18
18
1
import pandas as pd
2
3
markets_base = [
4
'Over/Under 8.5 Goals','First Half Goals 1.5','Over/Under 4.5 Goals','First Half Goals 0.5'
5
]
6
7
markets_df = pd.DataFrame({
8
'competition': ['a','b','c'],
9
'market_name': ['First Half Goals 1.5','Over/Under 4.5 Goals','First Half Goals 0.5']
10
})
11
12
for mkt_base in markets_base:
13
if len(markets_df.loc[markets_df['market_name'] == mkt_base]) > 0:
14
final_row = markets_df.loc[markets_df['market_name'] == mkt_base].iloc[:1]
15
break
16
17
print(final_row)
18
Is there a more professional way to the same result or is this the correct model?
Advertisement
Answer
A possible solution involves turning your ‘market_name’ column into categorical as explained in this answer: Custom sorting in pandas dataframe
In your case this would do the trick:
JavaScript
1
17
17
1
import pandas as pd
2
3
markets_df = pd.DataFrame({
4
'competition': ['a', 'b', 'c', 'd', 'e'],
5
'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']
6
})
7
markets_base = [
8
'Over/Under 8.5 Goals', 'First Half Goals 1.5', 'Over/Under 4.5 Goals', 'First Half Goals 0.5'
9
]
10
11
#here's the thing
12
markets_df["market_name"] = pd.Categorical(
13
markets_df['market_name'], markets_base)
14
15
final_row = markets_df.sort_values("market_name").iloc[:1]
16
print(final_row)
17