gpt4 book ai didi

python - Pandas hub_table 用 0 aggfunc ='sum' 替换 nan

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:40 24 4
gpt4 key购买 nike

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

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”是浮点列。对象数据类型是使数据透视表工作的尝试,即使数据类型不同(内容方面)。

当其中一个值非 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'

关于如何得到 nan 而不是 0 有什么建议吗?

最佳答案

替代解决方案是使用GroupBy.sum带有参数 min_count=1,但删除了非 numeric columns :

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

因为 pivot_table 被删除了 NaN 列:

df = df.pivot_table(index=['indices'], 
columns=['column'],
values=['start_value','end_value','delta','name','unit'],
aggfunc=lambda x: x.sum(min_count=1)
)
print (df)
end_value name unit
column '1nan' '1nan' 'other' '1nan' 'other'
indices
A 1000.0 'test' 'test2' 'USD' 'USD'

关于python - Pandas hub_table 用 0 aggfunc ='sum' 替换 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53143406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com