我正在使用这种形式的多值数据透视表:
pivot = df.pivot_table(index=[indices], columns=['column'], values=['start_value','end_value','delta','name','unit'], aggfunc='sum')
数据帧df包含所有dtype对象的列['start_value','end_value','delta','name','unit']。这是因为'name'和'unit'实际上是字符串列,'start_value','end_value'和'delta'浮点列。对象dtype是一种使数据透视表正常工作的尝试,即使dtypes不同(在内容方面)也是如此。
当其中一个值不为nan时,任何nan值都将转换为0,而不是nan。
df:
indices, column, 'start_value','end_value','delta','name','unit'
A, '1nan', nan, 1000, nan, 'test', 'USD'
A, 'other', nan, nan, nan, 'test2', 'USD'
产生枢轴:
indices, ('1nan', 'start_value'), ('1nan', 'end_value'), ('1nan', 'delta'),('1nan', 'name'), ('1nan', 'unit'), ('other', 'start_value'), ('other', 'end_value'), ('other', 'delta'), ('other', 'name'), ('other', 'unit')
A, 0 [should be nan], 1000, 0 [should be nan], 'test','USD', nan, nan, nan, 'test2', 'USD'
关于如何获得nans而不是0的任何建议?
答案 0 :(得分:1)
要使用数据透视表获得您想要的结果:您应该用 0 填充第一个 Nan 值:
df.fillna(0)
然后制作您的数据透视表。
答案 1 :(得分:0)
另一种解决方案是将GroupBy.sum
与参数async function test() {
const paths = await readdirPromisify(__dirname);
const options = await Promise.all(paths.map(isOptionDirectory));
return paths.filter((_, i) => options[i].isFile());
}
一起使用,但是删除了非numeric columns:
min_count=1
因为df = (df.groupby(['indices', 'column'])
['start_value','end_value','delta','name','unit']
.sum(min_count=1)
.unstack()
)
print (df)
start_value end_value delta
column '1nan' 'other' '1nan' 'other' '1nan' 'other'
indices
A NaN NaN 1000.0 NaN NaN NaN
被删除了NaNs列:
pivot_table