我有这样的东西:
XY UV BC Val
0 y u c 11
1 y u b 22
2 y v c 33
3 y v b 44
4 x u c 111
5 x u b 222
6 x v c 333
7 x v b 444
我想得到
XY UV B_Val C_Val
0 y u 22 11
1 y v 44 33
2 x u 222 111
3 x v 444 333
一般来说,上面的 BC 列可以包含许多不同的项目,所以我需要一个适用于一般情况的解决方案,而不仅仅是针对 2 个不同的值。
我尝试编写一些代码来拆分数据帧,而不是重新加入单独的部分,但它开始看起来太复杂了,而且没有任何进展。
请您参考如下方法:
这是我喜欢使用多级索引和堆栈/取消堆栈的地方。
所以在这里,我会做:
from io import StringIO
import pandas
datacsv = StringIO("""\
XY UV BC Val
y u c 11
y u b 22
y v c 33
y v b 44
x u c 111
x u b 222
x v c 333
x v b 444
""")
df = pandas.read_csv(datacsv, sep='\s+')
df.set_index(['XY', 'UV', 'BC']).unstack(level='BC')
这给了我们:
Val
BC b c
XY UV
x u 222 111
v 444 333
y u 22 11
v 44 33
所以我们在行和列上都有 MultiIndexes。假设你不想要那样,我会这样做:
xtab = (df.set_index(['XY', 'UV', 'BC'])
.unstack(level='BC')['Val']
.reset_index())
这会给你:
BC XY UV b c
0 x u 222 111
1 x v 444 333
2 y u 22 11
3 y v 44 33
