2017-12-02 56 views
0

分组转换分组堆积列到多列,我组织了我的数据框使用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 

我复方排序,以便重新安排所有索引最初按样本排序

+0

https://pandas.pydata.org/pandas- docby/stable/generated/pandas.DataFrame.unstack.html – Abhishek

回答

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') 
+0

groupby函数会根据索引对列进行分组,除非您明确地告诉它不要使用as_index = False选项)。化合物名称不显示在每一行的事实使我认为它是索引的一部分。 –

+0

我按所有列分组,所以我可能已将所有值放在索引中?我不确定它是如何工作的。我编辑了我的问题,以显示在使用groupby函数之前它的样子。 –