通过将每列重复一定次数来创建数据框

Car*_*arl 2 python dataframe python-3.x pandas

我需要打开以下数据框:

ID   | A  | B  | C  | D  | E  |
1    | 3  | 1  | 2  | 1  | 0  |
2    | 0  | 1  | 2  | 5  | 2  |
3    | 2  | 2  | 5  | 3  | 10 |
Run Code Online (Sandbox Code Playgroud)

将每个列名作为新值,重复值中指定的次数。因此,三排“A”,一排“B”等:

ID | VALUE |
1  | A     |
1  | A     |
1  | A     |
1  | B     |
1  | C     |
1  | C     |
1  | D     |
2  | B     |
2  | C     |
2  | C     |
...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在循环播放,建立一个新的数据框,但它永远需要(100,000 个原始行,值 100+)并且感觉不对。已经看过了meltexplode但这不是我想要的。这样做的任何优雅的解决方案?

data = [{'ID': 1, 'A': 3, 'B': 1, 'C': 2, 'D': 1, 'E': 0},
        {'ID': 2, 'A': 0, 'B': 1, 'C': 2, 'D': 5, 'E': 2},
        {'ID': 3, 'A': 2, 'B': 2, 'C': 5, 'D': 3, 'E': 10}]

df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 5

一种使用方式pandas.DataFrame.columns.repeat

df.apply(df.columns.repeat, axis=1).explode()
Run Code Online (Sandbox Code Playgroud)

输出:

ID
1    A
1    A
1    A
1    B
1    C
1    C
1    D
2    B
...
3    E
3    E
3    E
dtype: object
Run Code Online (Sandbox Code Playgroud)