Hey having some trouble getting this to work. Whenever I run the notebook it runs into an error when it gets to this part of the code:
Code:
# calculated modified best position based on fielding ratings - i.e. whether a hitter 'has a position' or is just a 1b/dh
def determine_positions(row):
positions = [] # List to store all eligible positions
# Apply position rules
if row['fielding_ratings_catcher_framing'] >= 150:
positions.append('C')
if row['fielding_ratings_infield_range'] > 160:
positions.append('SS')
if 133 < row['fielding_ratings_infield_range'] < 159:
positions.append('2B')
if row['fielding_ratings_infield_range'] > 111 and row['fielding_ratings_infield_arm'] > 133:
positions.append('3B')
if row['fielding_ratings_outfield_range'] > 160:
positions.append('CF')
if 133 < row['fielding_ratings_outfield_range'] < 159:
positions.append('RF')
if 111 < row['fielding_ratings_outfield_range'] < 133:
positions.append('LF')
# Determine 'has_pos' column (yes if qualified for any position, else blank)
has_pos = "yes" if positions else ""
# Convert list of positions into a string (comma-separated)
field_positions = ", ".join(positions) if positions else ""
return pd.Series([has_pos, field_positions])
# Apply function to dataframe
merged_df[['has_pos', 'field']] = merged_df.apply(determine_positions, axis=1)
Error Message is:
Code:
ValueError Traceback (most recent call last)
Cell In[136], line 31
28 return pd.Series([has_pos, field_positions])
30 # Apply function to dataframe
---> 31 merged_df[['has_pos', 'field']] = merged_df.apply(determine_positions, axis=1)
File c:\Users\****\anaconda3\Lib\site-packages\pandas\core\frame.py:4299, in DataFrame.__setitem__(self, key, value)
4297 self._setitem_frame(key, value)
4298 elif isinstance(key, (Series, np.ndarray, list, Index)):
-> 4299 self._setitem_array(key, value)
4300 elif isinstance(value, DataFrame):
4301 self._set_item_frame_value(key, value)
File c:\Users\****\anaconda3\Lib\site-packages\pandas\core\frame.py:4341, in DataFrame._setitem_array(self, key, value)
4336 else:
4337 # Note: unlike self.iloc[:, indexer] = value, this will
4338 # never try to overwrite values inplace
4340 if isinstance(value, DataFrame):
-> 4341 check_key_length(self.columns, key, value)
4342 for k1, k2 in zip(key, value.columns):
4343 self[k1] = value[k2]
File c:\Users\****\anaconda3\Lib\site-packages\pandas\core\indexers\utils.py:390, in check_key_length(columns, key, value)
388 if columns.is_unique:
...
391 else:
392 # Missing keys in columns are represented as -1
393 if len(columns.get_indexer_non_unique(key)[0]) != len(value.columns):
ValueError: Columns must be same length as key