python - 如何将复制分组为 Pandas 数据框中的列
问题描述
我有一个带有重复的数据集,我需要从这样的东西开始
S1 S1 S2 S2
S1.1 S1.2 S2.1 S2.2
Ion1 10 8 14 1
Ion2 0 6 2 3
前两行是多级标题。s1 和 S2 是样本,s1.1 等是该样本的重复测量的文件名。它们不会是这里显示的简单名称
我需要去这样的事情
Rep1 Rep2
Ion1 S1 10 8
Ion1 S2 14 1
Ion2 S1 0 6
Ion2 S2 2 3
其中 rep1 和 rep2 通常表示第一次和第二次重复测量,并且样品行是堆叠的。
最终我想计算重复的平均值。现在我正在一个 numpy 矩阵中执行此操作,并在输入矩阵中插入一行带有代表数字的行并将其导入熊猫,但这是不优雅的,我宁愿在数据框中执行此操作
编辑:我想我有点困惑。当我说名称不简单时,它们不会是 S1.1,它们可能是 XF20114,而 S1.2 可能是 XF19372 CF,而 S1 可能被称为“佛罗里达”,所以名称的最后一个数字不能是依靠。现在,我只需滚动浏览 numpy 矩阵中的示例行,如果示例编号与之前的相同,则将增加的数字放入新行中。如果示例名称更改,我将数字设置为 1。这使得示例中的表格如下所示:
S1 S1 S2 S2
S1.1 S1.2 S2.1 S2.2
1 2 1 2
Ion1 10 8 14 1
Ion2 0 6 2 3
无论重复名称是什么,我是否可以将具有相同样品名称的所有值分组为一个离子?
解决方案
# stack the first level
df_s = df.stack(level=0)
# groupby the last string in the cols and sum
df_s.groupby(df_s.columns.str[3:], axis=1).sum()
1 2
0
Ion1 S1 10.0 8.0
S2 14.0 1.0
Ion2 S1 0.0 6.0
S2 2.0 3.0
推荐阅读
- laravel - 调用数组上的成员函数 fill()
- angular - 如何在 Angular 8 中制作相同的材质 sidenav 行为?
- algorithm - 关联文件内容以查找移动是否有效?
- c# - 如何使用跨度
在异步方法中? - javascript - webpack热加载器在代码更改时重新编译但它没有反映在输出中(app.js)
- javascript - 如何对使用 jquery 在单个图像标签中传递的所有图像应用鼠标悬停缩放效果?
- python - Findall 给我不同来源的相同物品
- angular - 在模块类中编译角度项目时出错
- php - 使用 PHP 登录 Google
- css - Vue.js 应用程序中的 CSS:Safari 和 Firefox 未加载 Google 字体