Scenario: I have a pandas dataframe. I am trying to use the values in a given column (year) to find the relevant header name and add it to a new column (year_name). For example, if the dataframe looks like this:
| itemName | 2020 | 2021 | 2022 | 2023 | 2024 | year |
|---|---|---|---|---|---|---|
| item1 | 5 | 20 | 10 | 10 | 50 | 3 |
| item2 | 10 | 10 | 50 | 20 | 40 | 2 |
| item3 | 12 | 35 | 73 | 10 | 54 | 4 |
The result should be like this:
| itemName | 2020 | 2021 | 2022 | 2023 | 2024 | year | year_name |
|---|---|---|---|---|---|---|---|
| item1 | 5 | 20 | 10 | 10 | 50 | 3 | 2022 |
| item2 | 10 | 10 | 50 | 20 | 40 | 2 | 2021 |
| item3 | 12 | 35 | 73 | 10 | 54 | 4 | 2023 |
Obs. the itemName column is the index.
Issue: I am trying to use a lambda function to use the value of each row of "year" and use it to find the column name for that row and add it to the year_name column.
Function: I tried:
col_names = result_dict[col].columns.tolist()
result_df[[last_year_header']] = result_df[[_last_year']].apply(lambda x: col_names[x])
but this gave me the following error:
TypeError: list indices must be integers or slices, not Series
I also tried:
col_names = result_dict[col].columns.tolist()
result_df[[last_year_header']] = result_df[[_last_year']].apply(lambda x: col_names[x.iloc[0].astype(int)])
But this gave me:
IndexError: list index out of range
Question: I am clearly missing something with the implementation of the lambda function in this case. How can I fix this?