在python pandas

时间:2016-12-23 07:36:44

标签: python pandas group-by mean

我的数据集看起来像这样,但要大得多。

Column A   Column B  Result
1          1         2.4
1          4         2.9
1          1         2.8
2          5         9.3
3          4         1.2

df.groupby(['Column A','Column B'])['result'].mean() 

Column A   Column B  Result
1          1         2.6
           4         2.9
2          5         9.3
3          4         1.2

我希望列B的范围为1-10,这些行的结果是A列和B列的平均值。所以这是我想要的表:

Column A   Column B  Result
1          1         2.6
           2         2.75
           3         2.75
           4         2.9 
           5         6.025
2          1         5.95
           2         9.3
           3         9.3
...

希望重点是这一点。我知道平均而言非常令人困惑所以我会满足于只能填写我想要的范围的缺失值。我很感激帮助!

1 个答案:

答案 0 :(得分:1)

您需要reindexMultiIndex.from_product创建的新index,然后groupby创建Column A mean fillna df = df.groupby(['Column A','Column B'])['Result'].mean() mux = pd.MultiIndex.from_product([df.index.get_level_values(0).unique(), np.arange(1,10)], names=('Column A','Column B')) df = df.reindex(mux) df = df.groupby(level='Column A').apply(lambda x: x.fillna(x.mean())) print (df) Column A Column B 1 1 2.60 2 2.75 3 2.75 4 2.90 5 2.75 6 2.75 7 2.75 8 2.75 9 2.75 2 1 9.30 2 9.30 3 9.30 4 9.30 5 9.30 6 9.30 7 9.30 8 9.30 9 9.30 3 1 1.20 2 1.20 3 1.20 4 1.20 5 1.20 6 1.20 7 1.20 8 1.20 9 1.20 Name: Result, dtype: float64 每组:

{{1}}