我有一个愚蠢的问题,我似乎无法解决。我需要像这样采集一个熊猫数据框:
id part1 part2 part3 part4 part5
23024 xyz9 23l lk8 jkd9 298
48392 xyz10 24x 29x ef3 298
现在,我只想“旋转”表,以便有两列显示ID和零件:
id Parts
23024 xyz9
23024 23l
23024 lk8
23024 jkd9
23024 298
48392 xyz10
48392 29x
48392 ef3
48392 298
我首先获得了所有唯一的ID:
lst =[]
for i in df['id']:
if i is not None:
lst.append(i)
然后尝试了一些函数来获取值,但失败了:
df_new = pd.DataFrame(columns=['id', 'parts'])
for i in lst:
temp_df = df.loc[df['id'] == i]
for x in temp_df.columns:
temp_list = []
temp_list.append([str(i), str(temp_df[x][0])])
temp_df = pd.DataFrame(temp_list, columns=['id', 'parts'])
df = df.append(temp_df)
但是我一直收到KeyErrors。我在做什么错了?
答案 0 :(得分:3)
因此,这里还有两个选项melt
和wide_to_long
:我个人建议第二个选项,因为重塑后我们不会丢失任何信息,我们仍然拥有零件号
df.melt('id')
Out[167]:
id variable value
0 23024 part1 xyz9
1 48392 part1 xyz10
2 23024 part2 23l
3 48392 part2 24x
4 23024 part3 lk8
5 48392 part3 29x
6 23024 part4 jkd9
7 48392 part4 ef3
8 23024 part5 298
9 48392 part5 298
pd.wide_to_long(df,['part'],i='id',j='number')
Out[168]:
part
id number
23024 1 xyz9
48392 1 xyz10
23024 2 23l
48392 2 24x
23024 3 lk8
48392 3 29x
23024 4 jkd9
48392 4 ef3
23024 5 298
48392 5 298
答案 1 :(得分:1)
另一种方法是将ARRAY
设置为索引并堆叠其余的列:
'id'
如果需要,您可以选择要保留的重要列:
df_new = df.set_index('id').stack().reset_index()
输出:
df_new[['id', 0]].rename(columns={0: 'Parts'})