Python 熊猫-对于每个索引,将所有列放入行中
我试图避免循环,但标题可以解释这个问题Python 熊猫-对于每个索引,将所有列放入行中,python,pandas,Python,Pandas,我试图避免循环,但标题可以解释这个问题 import pandas as pd df = pd.DataFrame(columns=['Index',1,2,3,4,5]) df = df.append({'Index':333,1:'A',2:'C',3:'F',4:'B',5:'D'}, ignore_index=True) df = df.append({'Index':234,1:'B',2:'D',3:'C',4:'A',5:'Z'}, ignore_index=True) df.s
import pandas as pd
df = pd.DataFrame(columns=['Index',1,2,3,4,5])
df = df.append({'Index':333,1:'A',2:'C',3:'F',4:'B',5:'D'}, ignore_index=True)
df = df.append({'Index':234,1:'B',2:'D',3:'C',4:'A',5:'Z'}, ignore_index=True)
df.set_index('Index', inplace=True)
print(df)
1 2 3 4 5
Index
333 A C F B D
234 B D C A Z
我想保留索引,并为每一列将其转换为具有相应值的行,如下所示:
newcol value
Index
333 1 A
333 2 C
333 3 F
333 4 B
333 5 C
234 1 B
234 2 D
234 3 C
234 4 A
234 5 Z
这有点像转置问题,但不是完全那样。有什么想法吗?您需要:
df.stack().reset_index(1, name='value').rename(columns={'level_1':'newcol'})
# OR df.reset_index().melt('Index',var_name='new_col',value_name='Value').set_index('Index')
#(cc: @anky_91)
输出:
newcol value
Index
333 1 A
333 2 C
333 3 F
333 4 B
333 5 D
234 1 B
234 2 D
234 3 C
234 4 A
234 5 Z
另一种解决方案是使用“框架”和“重命名轴”:
df.stack().to_frame('value').rename_axis(index=['','newcol']).reset_index(1)
newcol value
333 1 A
333 2 C
333 3 F
333 4 B
333 5 D
234 1 B
234 2 D
234 3 C
234 4 A
234 5 Z
df.stack().reset_index(name='value')
?或者df.reset\u index().melt('index',var\u name='new\u col',value\u name='value')
堆栈和melt解决方案都可以工作。我会研究更多关于这些,但如果你有任何其他意见,请分享。谢谢这显然是个骗局