PandasSeries.value_counts()
有一个dropna
参数,但DataFrame.value_counts()
没有。这是我的问题。但我确信有一个原因和替代解决方案。
这个用例是我想计算DataFrame中的模式(特定列的值组合),对于这个用例,我也想计算None
/NaN
。
这是8行的数据。
name foo bar sun
0 Tim 1 2 True
1 Tim 2 2 False
2 Tim 2 2 False
3 Anna 1 3 None
4 Anna 3 5 None
5 Bob 2 2 False
6 Bob 5 5 True
7 Bob 1 1 None
我可以用df[['foo', 'bar']].value_counts()
来计算所有的foo-bar组合,得到的总和为8(所有行)。
foo bar
2 2 3
1 1 1
2 1
3 1
3 5 1
5 5 1
dtype: int64
但是,当我向模式中添加包含列的NaN
值时,不计算包含NaN
的行。
foo bar sun
2 2 False 3
1 2 True 1
5 5 True 1
这是完整的代码。
import pandas as pd
import random as rd
data = {'name': ['Tim', 'Tim', 'Tim', 'Anna', 'Anna', 'Bob', 'Bob', 'Bob'],
'foo': [1, 2, 2, 1, 3, 2, 5, 1],
'bar': [2, 2, 2, 3, 5, 2, 5, 1],
'sun': [True, False, False, None, None, False, True, None]
}
# That is the initial DataFrame
df = pd.DataFrame(data)
print(df)
# counter foo-bar patterns
pa = df[['foo', 'bar']].value_counts()
print(pa)
# count foo-bar-sun patterns
# PROBLE: None/NaN is not counted
pb = df[['foo', 'bar', 'sun']].value_counts()
print(pb)
1条答案
按热度按时间cotxawn71#
我认为它还不受支持,可能的替代解决方案: