python - 数据框 set_index 产生重复的索引值,而不是进行分层分组
问题描述
我有一个看起来像这样的数据框(未显示索引)
Time Letter Type Value
0 A x 10
0 B y 20
1 A y 30
1 B x 40
3 C x 50
我想生成一个如下所示的数据框:
Time Letter TypeX TypeY
0 A 10 20
0 B 20
1 A 30
1 B 40
3 C 50
为此,我决定首先创建一个包含多个索引、Time、Letter 的表,然后取消堆叠最后一个索引类型。
假设我的原始数据框名为 my_table:
my_table.reset_index().set_index(['Time', 'Letter']) 而不是将其分组以便在每个时间索引下,字母都有 X 型和 Y 型,它们似乎已被排序(添加一些更多条目来证明一点):
Time(i) Letter(i) Type Value
0 A x 10
D x 25
H x 15
G x 33
1 B x 40
G x 10
3 C x 50
0 B y 20
H y 10
1 A y 30
为什么会这样?我期待这样的结果:
Time Letter Type Value
0 A x 10
y 30
B y 20
H x 15
y 10
D x 25
G x 33
1 B x 40
G x 10
3 C x 50
当我将 Type 设为索引之一时,也会发生相同的行为,它只是变为粗体作为索引。
如何使用 Time 和 Letter 成功对列进行分组以使 X 和 Y 与这些列匹配,以便我可以成功使用 unstack?
解决方案
您还需要将类型设置为索引
df.set_index(['Time','Letter','Type']).Value.unstack(fill_value='').reset_index()
Out[178]:
Type Time Letter x y
0 0 A 10
1 0 B 20
2 1 A 30
3 1 B 40
4 3 C 50
推荐阅读
- javascript - @RequestParam 没有收到价值
- python - 使用错误信息登录
- c# - 如何增加缓冲区大小以通过 .NET 中的 websocket 发送数据
- angular - 子组件的 Formcontrol 值无法在提交时绑定
- ios - ios快捷方式:从选择列表中提取字典键
- java - 如何替换具有双冒号的java代码
- server - 100~300 个同时用户的托管要求
- angular - 打字稿类型转换可观察变量
- r - ggplot 2中等效的箱线图+建议异常值检测和正态性
- z3 - 如何在 Z3 Solver/theorem Prover 下获取未解释排序的常量和特定实例?