如何通过循环创建并追加DataFrame,按条件生成饼图所需数据集
Pandas筛选DataFrame与饼图绘制基础指南
一、修复循环生成DataFrame的问题
你原来的循环每次都会把my_pie重新赋值为单行数据,最后自然只剩最后一行。要收集100行第1、3列的数据,不用循环,直接用切片更高效:
# 直接取前100行的第1、3列(iloc索引从0开始) my_pie = data.iloc[:100, [1, 3]] display(my_pie)
如果一定要用循环(不推荐,效率低),得先初始化空列表存每一行,最后合并:
rows = [] for i in range(100): row = data.iloc[[i], [1, 3]] rows.append(row) # 把列表里的所有行合并成一个DataFrame my_pie = pd.concat(rows) display(my_pie)
二、按条件筛选数据的基础方法
1. 取100个最常见的值
针对某一列统计频次,取前100个高频值对应的行:
# 统计第1列的高频值,取前100个 top_100_common = data.iloc[:,1].value_counts().head(100).index # 筛选原数据中第1列属于这些高频值的行 filtered_df = data[data.iloc[:,1].isin(top_100_common)]
2. 取某列的100个最高值
按指定列降序排序后取前100行:
# 按第3列降序排序,取前100行 top_100_high = data.sort_values(by=data.columns[3], ascending=False).head(100)
3. 取某列的100个最低值
按指定列升序排序后取前100行:
# 按第3列升序排序,取前100行 top_100_low = data.sort_values(by=data.columns[3], ascending=True).head(100)
三、用筛选后的DataFrame绘制简单饼图
用pandas自带的绘图工具配合matplotlib显示:
import matplotlib.pyplot as plt # 用第1列做饼图标签,第3列做数值 my_pie.set_index(my_pie.columns[1], inplace=True) my_pie.plot.pie(y=my_pie.columns[0], figsize=(8,8)) plt.ylabel('') # 去掉默认的y轴标签 plt.show()
内容的提问来源于stack exchange,提问作者tooDeeStoned
相关产品推荐
相关产品推荐

