熊猫Pivot_table用0 aggfunc ='sum'

时间:2018-11-04 17:21:32

标签: python pandas

我正在使用这种形式的多值数据透视表:

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的任何建议?

2 个答案:

答案 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