Skip to main content
 首页 » 编程设计

python之Pandas dataframe之将列值转换为单独的列

2025年05月04日35unruledboy

我有这样的东西:

   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