如何将标签1转换为标签2
df = pd.DataFrame({'A': [3, 5], 'B': [4, 6], 'Z': [6, 8]}, index=[1, 100])
我想Pandasdf.melt可能会有帮助,但我不确定
df.melt
k4emjkb11#
您可以将 Dataframe 扁平化并操作索引以获得预期输出:
out = (df.unstack().sort_index(level=1) .set_axis([f'{j}{i}' for i in df.index for j in df.columns]) .rename_axis('var').rename('val').reset_index())
输出:
>>> out var val 0 A1 3 1 B1 4 2 Z1 6 3 A100 5 4 B100 6 5 Z100 8
ej83mcc02#
使用DataFrame.melt,将索引值添加到col1列,然后对索引进行排序:
DataFrame.melt
col1
df1 = df.melt(ignore_index=False, var_name='col1', value_name='col2') df1['col1'] += df1.index.astype(str) df1 = df1.sort_index(ignore_index=True) print (df1) col1 col2 0 A1 3 1 B1 4 2 Z1 6 3 A100 5 4 B100 6 5 Z100 8
或者使用DataFrame.stack,连接多索引值并转换为DataFrame:
DataFrame.stack
DataFrame
s = df.stack() s.index = [f'{b}{a}' for a, b in s.index] df1 = s.rename_axis('col1').reset_index(name='col2') print (df1) col1 col2 0 A1 3 1 B1 4 2 Z1 6 3 A100 5 4 B100 6 5 Z100 8
2条答案
按热度按时间k4emjkb11#
您可以将 Dataframe 扁平化并操作索引以获得预期输出:
输出:
ej83mcc02#
使用
DataFrame.melt
,将索引值添加到col1
列,然后对索引进行排序:或者使用
DataFrame.stack
,连接多索引值并转换为DataFrame
: