View Single Post
Old 03-23-2025, 03:53 PM   #12
Cerpin
Bat Boy
 
Join Date: Mar 2025
Posts: 3
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
Cerpin is offline   Reply With Quote