【发布时间】:2021-10-12 23:36:06
【问题描述】:
我有一个如下形式的数据框:
| date | I1 | I2 | F1 | F2 |
|---|---|---|---|---|
| 1 | 1 | A | v1 | v9 |
| 1 | 1 | B | v2 | v10 |
| 1 | 10 | A | v3 | v11 |
| 1 | 10 | B | v4 | v12 |
| 2 | 1 | A | v5 | v13 |
| 2 | 1 | B | v6 | v14 |
| 2 | 10 | A | v7 | v15 |
| 2 | 10 | B | v8 | v16 |
我想根据来自“I1”和“I2”的值的可能组合创建新列,并将相应的值全部放在一行中(对于同一日期)。生成的数据框应如下所示(按列的顺序排列,这无关紧要,我只是出于可视化目的选择了一个):
| date | F1-1-A | F1-1-B | F1-10-A | F1-10-B | F2-1-A | F2-1-B | F2-10-A | F2-10-B |
|---|---|---|---|---|---|---|---|---|
| 1 | v1 | v2 | v3 | v4 | v9 | v10 | v11 | v12 |
| 2 | v5 | v6 | v7 | v8 | v13 | v14 | v15 | v16 |
在 pandas 中实现这一目标的最简洁和通用的方法是什么?
【问题讨论】:
-
你尝试了什么?
-
@sammywemmy 我尝试在日期上使用
.groupby(),但未能为.agg(f)或.apply(f)提供相应的f,这将实现我想要的。具体来说,我不知道如何以一次创建多个列的方式“折叠”原始数据框。我习惯了df['new'] = df.groupby(...).agg(...)。