python Pandas Dataframe .value_counts()不允许丢弃na =False

plupiseo  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(103)

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)
cotxawn7

cotxawn71#

我认为它还不受支持,可能的替代解决方案:

pb = df.groupby(['foo', 'bar', 'sun'], dropna=False).size()
print(pb)
foo  bar  sun  
1    1    NaN      1
     2    True     1
     3    NaN      1
2    2    False    3
3    5    NaN      1
5    5    True     1
dtype: int64

相关问题