通过将每列重复一定次数来创建数据框
我需要打开以下数据框:
ID | A | B | C | D | E |
1 | 3 | 1 | 2 | 1 | 0 |
2 | 0 | 1 | 2 | 5 | 2 |
3 | 2 | 2 | 5 | 3 | 10 |
将每个列名作为新值,重复值中指定的次数。因此,三排“A”,一排“B”等:
ID | VALUE |
1 | A |
1 | A |
1 | A |
1 | B |
1 | C |
1 | C |
1 | D |
2 | B |
2 | C |
2 | C |
...
到目前为止,我一直在循环播放,建立一个新的数据框,但它永远需要(100,000 个原始行,值 100+)并且感觉不对。已经看过了melt,explode但这不是我想要的。这样做的任何优雅的解决方案?
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)
回答
一种使用方式pandas.DataFrame.columns.repeat:
df.apply(df.columns.repeat, axis=1).explode()
输出:
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