在python pandas中groupby之后从列中填充缺失的行
Posted
技术标签:
【中文标题】在python pandas中groupby之后从列中填充缺失的行【英文标题】:Fill in missing rows from columns after groupby in python pandas 【发布时间】:2017-05-08 21:44:18 【问题描述】:我有一个看起来像这样但更大的数据集。
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】:您需要reindex
由MultiIndex.from_product
创建的新index
和groupby
由第一级Column A
和fillna
由mean
每组:
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
【讨论】:
以上是关于在python pandas中groupby之后从列中填充缺失的行的主要内容,如果未能解决你的问题,请参考以下文章
python pandas - 处理嵌套 groupby 的最佳方法
Python Pandas 从 Groupby 中选择随机组样本
遇到问题--python--pandas--dataframe进行groupby之后导出数据to_excel内容为空