我是数据领域的新手,我有这样的问题,这是我的数据框
------------------------------------------------------
ErrorCD ID Freq1 Freq2 Freq3....
------------------------------------------------------
1 A 2 3 2
2 B 1 2 2
3 C 1 3 3
我希望它是这样的:
---------------------
ErrorCD ID Freq
---------------------
1 A 2
2 A 3
3 A 2
.....
如何使用 python 做到这一点?
最佳答案
你要堆叠
df.set_index(['ErrorCD', 'ID']).stack().reset_index(name='Freq')
ErrorCD ID level_2 Freq
0 1 A Freq1 2
1 1 A Freq2 3
2 1 A Freq3 2
3 2 B Freq1 1
4 2 B Freq2 2
5 2 B Freq3 2
6 3 C Freq1 1
7 3 C Freq2 3
8 3 C Freq3 3
我们可以去掉 FreqX
列
df.set_index(['ErrorCD', 'ID']).stack().reset_index(name='Freq').drop('level_2', 1)
ErrorCD ID Freq
0 1 A 2
1 1 A 3
2 1 A 2
3 2 B 1
4 2 B 2
5 2 B 2
6 3 C 1
7 3 C 3
8 3 C 3
另一种方法,重建
f = df.filter(regex='^Freq')
m = f.shape[1]
pd.DataFrame(dict(
ErrorCD=df.ErrorCD.values.repeat(m),
ID=df.ID.values.repeat(m),
Freq=f.values.ravel()
))
ErrorCD Freq ID
0 1 2 A
1 1 3 A
2 1 2 A
3 2 1 B
4 2 2 B
5 2 2 B
6 3 1 C
7 3 3 C
8 3 3 C
你也可以使用pd.DataFrame.melt
df.melt(['ErrorCD', 'ID'], value_name='Freq').drop('variable', 1)
ErrorCD ID Freq
0 1 A 2
1 2 B 1
2 3 C 1
3 1 A 3
4 2 B 2
5 3 C 3
6 1 A 2
7 2 B 2
8 3 C 3
关于python - 使用python的数据格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46653818/