通过在Pandas中进行分组,将分组堆叠列转换为多个列

时间:2017-12-02 17:58:10

标签: pandas grouping

我使用groupby函数组织我的数据框看起来像这样:

Compound   Sample    Concentration  x   y
Benzene    A         15             Ax  Ay 
           B         20             Bx  By
           C         17             Cx  Cy

Toluene    A         23             Ax  Ay
           B         40             Bx  By

Xylene     A         70             Ax  Ay
           B         62             Bx  By
           C         55             Cx  Cy
           D         32             Dx  Dy

如何将列拆分为多个相同高度的列,并将分组作为列名?我希望实现这样的目标:

Sample    Benzene   Toluene    Xylene    x   y
A         15        23         70        Ax  Ay 
B         20        40         62        Bx  By
C         17        0          55        Cx  Cy
D         0         0          32        Dx  Dy    

编辑 我使用groupby函数后丢失了索引,我的数据看起来像这样:

    Compound       Sample        Concentration          x   y
1    Benzene       A             15                     Ax  Ay 
5    Benzene       B             20                     Bx  By
6    Benzene       C             17                     Cx  Cy
0    Toluene       A             23                     Ax  Ay
4    Toluene       B             40                     Bx  By
2    Xylene        A             70                     Ax  Ay
3    Xylene        B             62                     Bx  By
7    Xylene        C             55                     Cx  Cy
8    Xylene        D             32                     Dx  Dy

我按化合物排序,以便重新排列所有索引,这些索引最初按样本

排序

1 个答案:

答案 0 :(得分:0)

根据您的发布情况,您的哪些列在索引中并不是很清楚。如果它们都不是(您可以使用df.reset_index()强制执行),那么您可以执行以下操作:

df.set_index(['Compound', 'Sample', 'x', 'y'], inplace = True)
df = df['Concentration']
df = df.unstack(level = 0)
df.reset_index(inplace = True)

这与您的输出不匹配的唯一方法是x和y列现在位于数据的左侧。由于看起来这些列很容易从样本字母构建,因此在转换后添加它们可能更容易。也就是说,如果你的小组给你一个数据框,其中包含索引中的化合物和样本,并且浓度是唯一的列,你可以这样做:

df = df['Concentration'].unstack(level = 0)

然后添加x和y列。

编辑:从您的原始数据中,您也可以执行此操作,这可以完成您对groupby所做的操作并一步重塑:

df2 = pd.pivot_table(df, index = ['Sample', 'x', 'y'], columns = 'Compound', values = 'Concentration')