Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting row values by column name

I have the following data frame:

šŸ >>> data = {'seasons': ['season_2', 'season_3', 'season_4', 'season_5', 'season_6', 'season_7', 'season_1']}
šŸ >>> df = pd.DataFrame(data)
šŸ >>> df['season_1'] = 1
šŸ >>> df['season_2'] = 2
šŸ >>> df['season_3'] = 3
šŸ >>> df['season_4'] = 4
šŸ >>> df['season_5'] = 5
šŸ >>> df['season_6'] = 6
šŸ >>> df['season_7'] = 7
šŸ >>>
šŸ >>> df
    seasons  season_1  season_2  season_3  season_4  season_5  season_6  season_7
0  season_2         1         2         3         4         5         6         7
1  season_3         1         2         3         4         5         6         7
2  season_4         1         2         3         4         5         6         7
3  season_5         1         2         3         4         5         6         7
4  season_6         1         2         3         4         5         6         7
5  season_7         1         2         3         4         5         6         7
6  season_1         1         2         3         4         5         6         7

How do I make the a new column that has the value of the column specified in seasons for the given row? e.g. I expect season_values to have a value of:

season_values = [2, 3, 4, 5, 6, 7, 1]
like image 459
alexjrlewis Avatar asked May 20 '26 14:05

alexjrlewis


2 Answers

TRY:

df = df.assign(season_values = df.apply(lambda x: x[x['seasons']],1))
# df['season_values'] = df.apply(lambda x: x[x['seasons']],1)

Another option via melt:

melt = df.melt(['seasons'], ignore_index=False)
df['season_value'] = melt.loc[melt['seasons'] == melt['variable']]
like image 163
Nk03 Avatar answered May 23 '26 02:05

Nk03


Try

df.lookup(df.index,df.seasons)
Out[234]: array([2, 3, 4, 5, 6, 7, 1])

Or

df.values[df.index,df.columns.get_indexer(df.seasons)]
Out[235]: array([2, 3, 4, 5, 6, 7, 1], dtype=object)
like image 43
BENY Avatar answered May 23 '26 04:05

BENY