按列名称获取行值

3

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

如何创建一个新的列,使其具有给定行中指定的 seasons 列的值?例如,我期望 season_values 具有以下值:

season_values = [2, 3, 4, 5, 6, 7, 1]
2个回答

2

请尝试:

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

使用 melt 的另一种选择:

melt = df.melt(['seasons'], ignore_index=False)
df['season_value'] = melt.loc[melt['seasons'] == melt['variable']]

我使用 pandas v0.25.1 出现了 TypeError: melt() got an unexpected keyword argument 'ignore_index' 的错误。 - ajrlewis

1

尝试

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

或者

df.values[df.index,df.columns.get_indexer(df.seasons)]
Out[235]: array([2, 3, 4, 5, 6, 7, 1], dtype=object)

第一种解决方案非常简洁...非常符合Python的风格。 - ajrlewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接