如何更改Pandas系列对象的列名



我正在尝试根据其他列的值为Pandas系列中的每个系列的列名称加前缀。目前,我的目标是将包含3列的Pandas数据帧更改为只有1列的名为"Data"的数据帧,或者其他什么。以下是堆叠数据帧以获得要使用的单个维度的示例。

df_single_level_cols = pd.DataFrame([[0, 1, 20], [2, 3, 40]],columns=['weight', 'height', 'girth'])
df = df_single_level_cols.stack()
print(df)
0  weight     0
height     1
girth     20
1  weight     2
height     3
girth     40
dtype: int64

对于每个系列,我需要在列名weightheight前面加上circuit的值。完成后,我将从等式中删除腰围,在我的系列中只剩下体重身高。在前缀和删除序列对象之后,应该如下所示:

0  20weight     0
20height     1
1  40weight     2
40height     3
dtype: int64

然后,当将其转换为数据帧时,我将具有以下内容:

Data
20weight     0
20height     1
40weight     2
40height     3

我试过摆弄.apply(…(.rename(…([/em>和_add_prefix(…(,但它们似乎都没用。如果我做一些类似的事情

df[0] = df[0].add_prefix("test")

当我用序列+设置数组元素时,我最终会出现错误。这实际上并没有使用周长的值,而是一种习惯重命名功能的方式。。

您可以改为melt

df = (df_single_level_cols
.astype({'girth': str})
.melt('girth', value_name='Data')
.assign(**{'girth': lambda d: d['girth']+d.pop('variable')})
.set_index('girth')
)

输出:

Data
girth         
20weight     0
40weight     2
20height     1
40height     3

这样?

df = pd.DataFrame([[0, 1, 20], [2, 3, 40]],columns=['weight', 'height', 'girth'])
df = df[['weight', 'height']].stack().reset_index(level=1).merge(df.girth, left_index=True, right_index=True, how='left')
df = df.set_index(df.girth.astype(str) + df.level_1).rename(columns={0: 'Data'})[['Data']]
> df
Data
20weight    0
20height    1
40weight    2
40height    3