希望在更改 Dataframe 的形状时保留NaN值。
这两个问题可能是相关的:
- How to preserve NaN instead of filling with zeros in pivot table?
- How to make two NaN as NaN after the operation instead of making it zero?
但无法使用所提供的答案-我可以以某种方式为np.sum设置一个最小计数吗?
import pandas as pd
import numpy as np
df = pd.DataFrame([['Y1', np.nan], ['Y2', np.nan], ['Y1', 6], ['Y2',8]], columns=['A', 'B'], index=['1988-01-01','1988-01-01', '1988-01-04', '1988-01-04'])
df.index.name = 'Date'
df
pivot_df = pd.pivot_table(df, values='B', index=['Date'], columns=['A'],aggfunc=np.sum)
pivot_df
输出为:
A Y1 Y2
Date
1988-01-01 0.0 0.0
1988-01-04 6.0 8.0
并且期望的输出是:
A Y1 Y2
Date
1988-01-01 NaN NaN
1988-01-04 6.0 8.0
6条答案
按热度按时间1aaf6o9v1#
从有用的评论来看,以下解决方案符合我的要求:
每个插槽的值应该是唯一的,所以用min函数替换sum函数应该不会有什么不同(在我的例子中)
jei2mxaa2#
如果没有重复条目,请使用
set_index
+unstack
如果有重复项,请将
groupby
与min_count
一起使用kkbh8khc3#
在本例中,我将通过
groupby
进行解析:输出:
如果需要,请将
isna().all()
更改为isna().any()
。a64a0gku4#
可以对值进行计数,并在为0(或小于预期计数)时丢弃:
它给出了预期结果:
当你对一个以上的值求和时,这个方法会给予合理的结果。
pw9qyyiw5#
我还想保留NaN值,还想继续使用
pivot_table
函数,所以我的解决方案如下:isr3a4wc6#
尝试将
'dropna= False'
添加到pivot_table函数中?