我使用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 :(得分: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')