Pandas透视表转DataFrame计算小计:缺失值填充报错及优化问询
层级数据集小计值填充问题
问题背景
我有一个带层级结构的数据集,其中total列值为Y的行是小计行,需要汇总其下方total为N的行对应的val列数值;col1-col3(实际为多列)构成层级结构,下级行需向上汇总。
问题现象
部分小计行(total='Y')的val列值为0(已通过fillna(0)处理),我尝试用pivot_table计算汇总值并填充,代码如下:
pivot = df.pivot_table( values=['val1', 'val2', 'val3'], index=['col1', 'col2', 'col3'], aggfunc=np.sum, fill_value=0) qry = f"Total == 'Y' & val1 == 0 & val2 == 0 & val3 == 0 & col2 != 0" df.loc[df.eval(qry), ['val1', 'val2', 'val3']] = pivot.loc[(df['col1'], df['col2'], df['col3'])]
执行后报错:ValueError: Buffer dtype mismatch, expected 'Python object' but got 'long'。
后续尝试的问题
- 尝试使用rhug123的单行代码填充,触发
InvalidIndexError,不确定是否是改写错误:
columns = ['Value1', 'Value2', 'Value3', 'Value4', 'Value5'] index = ['Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6'] df = (df.set_index(index).fillna(df.loc[df['Total'].eq('N')].groupby(index)[columns].sum()).reset_index())
- Laurent的代码在简化数据集上有效,但在真实数据中未按层级列(col1-col6)限定汇总范围,导致汇总行数错误,需要调整代码仅对同层级的
N行求和。
求助
如何修复pivot_table填充时的报错,或者找到正确的缺失小计值填充方法?
内容的提问来源于stack exchange,提问作者Christian C. Schouten
相关产品推荐
相关产品推荐

