我有一个如下所示的数据框:
名称 | 值 1 | 值 2 |
---|---|---|
A | 100 | 101 |
A | 100 | 102 |
A | 100 | 103 |
B | 200 | 201 |
B | 200 | 202 |
B | 200 | 203 |
C | 300 | 301 |
C | 300 | 302 |
C | 300 | 303 |
我正在努力解决这个问题:
名称 | 值 1 | 值 2 | 值 3 | 值 4 | 值 5 | 值 6 |
---|---|---|---|---|---|---|
A | 100 | 101 | 100 | 102 | 100 | 103 |
B | 200 | 201 | 200 | 202 | 200 | 203 |
C | 300 | 301 | 300 | 302 | 300 | 303 |
这是我迄今为止尝试过的;
dataframe.stack()
dataframe.unstack()
dataframe.melt(id_vars=['name'])
我需要通过确保转置数据;
- 第一行保持原样,但与相同名称关联的每个后续值都应转置为列。
- 虽然第二个值 B(for.ex)应将其关联值转换为 A 列值下的新值,但不应完全形成单独的值。
最佳答案
试试:
def fn(x):
vals = x.values.ravel()
return pd.DataFrame(
[vals],
columns=[f"value {i}" for i in range(1, vals.shape[0] + 1)],
)
out = (
df.set_index("name")
.groupby(level=0)
.apply(fn)
.reset_index()
.drop(columns="level_1")
)
print(out.to_markdown())
打印:
名称 | 值 1 | 值 2 | 值 3 | 值 4 | 值 5 | 值 6 | |
---|---|---|---|---|---|---|---|
0 | A | 100 | 101 | 100 | 102 | 100 | 103 |
1 | B | 200 | 201 | 200 | 202 | 200 | 203 |
2 | C | 300 | 301 | 300 | 302 | 300 | 303 |
关于Pandas - Pivot/stack/unstack/melt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72320964/