gpt4 book ai didi

python - 从部分分类列中获取 value_counts

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:33 30 4
gpt4 key购买 nike

我正在尝试使用 pandas(v0.23.4 ).当所有类别都存在时,这工作正常:

import calendar
import random

import pandas as pd

random.seed(1)

month_names = calendar.month_name[1:]
month_names += month_names

df1 = pd.DataFrame({
'Month': month_names,
'Flag': [random.choice([True, False]) for _ in month_names]
})

df1['Month'] = pd.Categorical(
df1['Month'], categories=calendar.month_name[1:], ordered=True
)
print(df1.groupby('Month')['Flag'].value_counts())

如预期打印:

Month      Flag 
January False 2
February True 2
March False 2
April True 2
May True 2
June False 2
July False 1
True 1
August False 1
True 1
September False 2
October True 2
November False 1
True 1
December False 2
Name: Flag, dtype: int64

但是,如果我们的 'Month' 列不包含所有可能的类别,pandas 会抛出一个 ValueError。例如:

month_names = ['January', 'February', 'March']
month_names += month_names

df2 = pd.DataFrame({
'Month': month_names,
'Flag': [random.choice([True, False]) for _ in month_names]
})

df2['Month'] = pd.Categorical(
df2['Month'], categories=calendar.month_name[1:], ordered=True
)
print(df2.groupby('Month')['Flag'].value_counts())

加注:

ValueError: operands could not be broadcast together with shape (12,) (3,)

有什么方法可以从部分数据中得到正确的 value_counts 结果?理想情况下,这将保留完整的类别集,但即使不保留也是一个开始。

最佳答案

如果您只想要观察到的类别,您可以使用observed-关键字:

print(df2.groupby('Month', observed=True)['Flag'].value_counts())
#Month Flag
#January False 1
# True 1
#February True 2
#March False 2
#Name: Flag, dtype: int64

要获取 groupby 中的所有值,您可以使用 crosstab 的解决方法,然后使用所有类别的 reindex。老实说,我不确定为什么原始 GroupBy 会给出 value_counts() 的错误(它适用于其他方法),但是在使用 stack 之后这有效将 Flag 列变成一个 MultiIndex:

(pd.crosstab(df2['Month'], df2['Flag'])
.reindex(df2['Month'].cat.categories.tolist(), fill_value=0)
.stack())
#Month Flag
#January False 1.0
# True 1.0
#February False 0.0
# True 2.0
#March False 2.0
# True 0.0
#April False 0.0
# True 0.0
#May False 0.0
# True 0.0
#June False 0.0
# True 0.0
#July False 0.0
# True 0.0
#August False 0.0
# True 0.0
#September False 0.0
# True 0.0
#October False 0.0
# True 0.0
#November False 0.0
# True 0.0
#December False 0.0
# True 0.0

关于python - 从部分分类列中获取 value_counts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227094/

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