python - 熊猫:按循环数计算每行的平均值
问题描述
我有一个 CSV 文件(Mspec 数据),看起来像这样:
#Header
#
"Cycle";"Time";"ms";"mass amu";"SEM c/s"
0000000001;00:00:01;0000001452; 1,00; 620
0000000001;00:00:01;0000001452; 1,20; 4730
0000000001;00:00:01;0000001452; 1,40; 4610
... ;..:..:..;..........;.........;...........
我通过以下方式阅读:
df = pd.read_csv(Filename, header=30,delimiter=';',decimal= ',' )
结果如下所示:
Cycle Time ms mass amu SEM c/s
0 1 00:00:01 1452 1.0 620
1 1 00:00:01 1452 1.2 4730
2 1 00:00:01 1452 1.4 4610
... ... ... ... ... ...
3872 4 00:06:30 390971 1.0 32290
3873 4 00:06:30 390971 1.2 31510
该数据包含多个具有相同参数的质谱扫描。周期数 1 表示扫描 1,依此类推。我想计算每个相应相同质量的最后一列 SEM c/s 的平均值。最后我想有一个新的数据框只包含:
ms "mass amu" "SEM c/s(mean over all cycles)"
显然,不需要计算质量的平均值。我想避免将每个循环读入一个新的数据帧,因为这意味着我必须查找每个质谱的长度。对于不同的测量(Soluion),“质量范围”和“分辨率”明显不同。我想直接在 numpy 中进行计算是最好的,但我被卡住了?
先感谢您
解决方案
您在所有周期中都有不同的ms,并且您想计算每组相同ms的SEM平均值。我将向您展示一个分步示例。
您应该调用每个组,然后将平均值放入字典中以在 DataFrame 中进行转换。
ms_uni = df['ms'].unique() #calculate the unique ms values
new_df_dict = { "ma":[], "SEM":[] } #later you will rename them
for un in range( len(ms_uni) ):
cms = ms_uni[un]
new_df_dict['ma'].append( cms )
new_df_dict['SEM'].append( df[ df['ms']==cms ]['SEM c/s'].mean() ) #advise: change the column name in a more safe SEM-c_s
new_df = pd.DataFrame(new_df_dict) #end of the dirty work
new_df.rename(index=str, columns={'ma':"mass amu", "SEM": "SEM c/s(mean over all cycles)"} )
希望它会有所帮助
推荐阅读
- javascript - 用动态数据反应图像滑块,第一个图像出现在 clickEvent 之后
- android - 当我输入这个时,它给了我“以下函数都不能用提供的参数调用。”
- python - Tensorflow 卷积神经网络负维度大小
- swift - 我有一个复杂的 UIView 层次结构,我需要做一个非常简单的操作,在子视图上设置背景颜色。任何可能的解决方案?
- python - 如何从列表创建列表
- gdb - 为 GDB 命令脚本分配唯一 ID
- gridsearchcv - 尽管有这个错误,我如何在 dast_ml 中运行 GridSearchCV?
- android - 如何在单个活动中使用片段中的主要活动浮动操作按钮?
- ios - 无法在 List ForEach 中以编程方式激活 NavigationLink
- node.js - 将语义 UI 与 Gatsby 项目集成 - 由于缺少关闭“)”,构建失败