首页 > 解决方案 > 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我应该怎么做才能得到预期的结果?

标签: pythonpandas

解决方案


这里: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重置NaNmask


推荐阅读