python - pivot_table 没有给出预期的结果
问题描述
东风:
id flag year amt
1 'Y' 2016 100
1 'Y' 2017 200
1 'Y' 2018 100
2 NaN 2016 100
2 'Y' 2017 200
我以year
和为中心amt
。
预期输出:
id flag 2016 2017 2018
1 'Y' 100.0 200.0 100.0
2 NaN 100.0 NaN NaN
2 'Y' NaN 200.0 NaN
代码:
t = df.pivot_table(index['id','flag'],columns='year',values='amt').reset_index()
我用上面的代码得到的实际输出:
id flag 2016 2017 2018
1 'Y' 100.0 200.0 100.0
2 'Y' NaN 200.0 NaN
我不确定为什么 pivot 会flag
过滤掉NaN
. df
我应该怎么做才能得到预期的结果?
解决方案
这里:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html 似乎没有一个理想的解决方案。所以你可以这样做:
t = df.fillna(0).pivot_table(index=['id','flag'],columns='year',values='amt').reset_index()
t['flag'].mask(t['flag'].eq(0),np.nan,inplace=True)
输出:
year id flag 2016 2017 2018
0 1 'Y' 100.0 200.0 100.0
1 2 NaN 100.0 NaN NaN
2 2 'Y' NaN 200.0 NaN
更改NaN
一个值,然后使用pivot
重置NaN
mask