
本教程旨在解决如何在pandas dataframe中,为每个分类组(如“continent”)完整展示所有预定义的分箱(如“rank”)并对那些在原始数据中未出现的分类-分箱组合填充零计数。我们将通过创建辅助列、使用`groupby`进行聚合,并结合`unstack`和`stack`操作来高效实现这一目标,确保数据分析的完整性和可视化的一致性。
在数据分析实践中,我们经常需要对数据进行分类和分箱统计。然而,默认的聚合操作只会显示实际存在的数据组合。当我们需要确保所有预定义的分箱(bins)都呈现在每个类别(category)下,即使某些组合的计数为零时,就需要采取额外的步骤。这对于保持数据结构的一致性、进行可视化或后续分析至关重要。
首先,我们从一个包含分类(如“Continent”)和已分箱数据(如“Rank”)的DataFrame开始。这个DataFrame反映了每个大陆下不同分箱的原始记录。
import pandas as pd
# 示例原始数据
data = {
'Continent': [
'Asia', 'North America', 'Asia', 'Europe', 'Europe',
'North America', 'Europe', 'Asia', 'Europe', 'Asia',
'Europe', 'Europe', 'Asia', 'Australia', 'South America'
],
'Rank': [
'(15.753, 29.227]', '(2.212, 15.753]', '(2.212, 15.753]',
'(2.212, 15.753]', '(15.753, 29.227]', '(56.174, 69.648]',
'(15.753, 29.227]', '(2.212, 15.753]', '(15.753, 29.227]',
'(2.212, 15.753]', '(29.227, 42.701]', '(29.227, 42.701]',
'(2.212, 15.753]', '(2.212, 15.753]', '(56.174, 69.648]'
]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)Pandas的groupby().count()方法默认需要一个列来进行计数。如果直接对多个列进行groupby().count(),它会尝试对所有非分组列进行计数。为了简单地获取每个组合的行数,我们可以添加一个辅助列。
# 添加一个辅助列,用于计数
df['count_col'] = 1
# 按 'Continent' 和 'Rank' 分组并计数
# as_index=False 将分组键保留为列
grouped_counts = df.groupby(['Continent', 'Rank'], as_index=False)['count_col'].count()
# 重命名计数列以便更清晰
grouped_counts = grouped_counts.rename(columns={'count_col': 'Count'})
print("\n按(Continent, Rank)分组后的计数(不含零值):")
print(grouped_counts)此时,grouped_counts DataFrame只包含实际在原始数据中出现的Continent-Rank组合及其计数。例如,如果某个大陆的某个分箱没有数据,它将不会出现在这个结果中。
为了让每个大陆都显示所有可能的分箱,即使其计数为零,我们可以利用unstack()和stack()的组合操作。
# 使用 unstack 和 stack 来填充零值
# 首先,将 'Continent' 和 'Rank' 设置为索引
df_indexed = df.set_index(['Continent', 'Rank'])
# 添加一个辅助列用于计数,并进行groupby
# 这里直接在设置索引后的DataFrame上进行计数
final_result = df_indexed.groupby(level=['Continent', 'Rank']).size().unstack(fill_value=0).stack().reset_index()
# 重命名计数列
final_result.columns = ['Continent', 'Rank', 'Count']
print("\n包含零计数的完整(Continent, Rank)组合:")
print(final_result)通过上述步骤,我们成功地为每个大陆展示了所有可能的分箱,并用零填充了那些在原始数据中没有记录的组合。
掌握这种技术,能够帮助数据分析师和工程师在处理分类和分箱数据时,生成更全面、更易于理解和分析的报告。
以上就是Pandas中为每个类别重复显示所有分箱并填充零计数的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号