假设我有一个频率表df
定义为:
dat = [[0, 2, 1], [1, 0, 3], [4, 1, 1]]
idx = pd.Index([*'abc'], name='One')
col = pd.Index([*'xyz'], name='Two')
df = pd.DataFrame(dat, idx, col)
df
Two x y z
One
a 0 2 1
b 1 0 3
c 4 1 1
如何将其“反转”以获得数据框pre_df
One Two
0 a y
1 a y
2 a z
3 b x
4 b z
5 b z
6 b z
7 c x
8 c x
9 c x
10 c x
11 c y
12 c z
pd.crosstab(pre_df.One, pre_df.Two)
会让我回到df
Two x y z
One
a 0 2 1
b 1 0 3
c 4 1 1
答案 0 :(得分:3)
尝试stack
和repeat
:
s = df.stack()
s.index.repeat(s).to_frame().reset_index(drop=True)
输出:
One Two
0 a y
1 a y
2 a z
3 b x
4 b z
5 b z
6 b z
7 c x
8 c x
9 c x
10 c x
11 c y
12 c z