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)
我应该如何在熊猫中做到这一点?
上一个问题向我展示了如何获取平均值 - 但我不清楚如何概括这一点以获取平均值的误差(又称标准差)。
非常感谢大家:)
您可以将索引提升为列并执行单个操作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)