如何创建一个包含另一个数据帧的某些行的平均值和标准差的Python数据帧

Fer*_*isi 1 python dataframe pandas pandas-groupby

我有一个 pandas DataFrame 包含一些值:

                    id  pair      value  subdir
taylor_1e3c_1s_56C  taylor  6_13  -0.398716    run1 
taylor_1e3c_1s_56C  taylor  6_13  -0.397820    run2 
taylor_1e3c_1s_56C  taylor  6_13  -0.397310    run3 
taylor_1e3c_1s_56C  taylor  6_13  -0.390520    run4 
taylor_1e3c_1s_56C  taylor  6_13  -0.377390    run5 
taylor_1e3c_1s_56C  taylor  8_11  -0.393604    run1
taylor_1e3c_1s_56C  taylor  8_11  -0.392899    run2
taylor_1e3c_1s_56C  taylor  8_11  -0.392473    run3
taylor_1e3c_1s_56C  taylor  8_11  -0.389959    run4
taylor_1e3c_1s_56C  taylor  8_11  -0.387946    run5
Run Code Online (Sandbox Code Playgroud)

我想做的是隔离具有相同索引、id 和对的行,计算值列的平均值和标准差,并将其全部放入一个新的数据框中。因为我现在已经有效地平均了 subdir 的所有可能值,所以该列也应该被删除。所以输出应该是这样的

                    id  pair      value     error
taylor_1e3c_1s_56C  taylor  6_13  -0.392351 0.013213
taylor_1e3c_1s_56C  taylor  8_11  -0.391376 0.016432
Run Code Online (Sandbox Code Playgroud)

我应该如何在熊猫中做到这一点?

上一个问题向我展示了如何获取平均值 - 但我不清楚如何概括这一点以获取平均值的误差(又称标准差)。

非常感谢大家:)

jpp*_*jpp 5

您可以将索引提升为列并执行单个操作groupby

import pandas as pd

df = pd.DataFrame([['taylor', '6_13', -0.398716, 'run1'],
                   ['taylor', '6_13', -0.397820, 'run2'], 
                   ['taylor', '8_11', -0.389959, 'run4'],
                   ['taylor', '8_11', -0.387946, 'run5']],
                  index=['taylor_1e3c_1s_56C', 'taylor_1e3c_1s_56C', 'taylor_1e3c_1s_56C', 'taylor_1e3c_1s_56C'],
                  columns=['id', 'pair', 'value', 'subdir'])
Run Code Online (Sandbox Code Playgroud)

原始数据框

将索引提升为列:

df['index'] = df.index
Run Code Online (Sandbox Code Playgroud)

列索引

执行groupby操作:

new_df = df.groupby(['index', 'id', 'pair']).agg({'value': ['mean', 'std']})
Run Code Online (Sandbox Code Playgroud)

聚合的新数据框