Pandas习题(多层索引、数据合并、数据清洗)
Pandas习题 - 多级索引/数据合并/数据清洗
指定列为基准相加两个数据
题目:以 x1 和 x2 为基础,将 value1 和 value2 两个列的对应数据相加,最终数据以先 df1 后 df2 为顺序的
1 | import io |
解法
1 | df1.set_index(["x1","x2"],inplace=True) |
对多层索引的部分列进行数字格式化
习题:对「毛利率」这一层以下的数据进行格式化,保留两位小数增加百分号,如 12.20%
1 | data = { |
解法
1 | df.apply(lambda x:x.map("{:,.2%}".format) if x.name[0] == "毛利率" else x) |
将 DataFrame 数据转为一行
题目:一个 DataFrame 结构的数据转为一行,即将二维的数据展开
1 | df = pd.DataFrame({ |
解法
1 | cols = df.stack().index.get_level_values(1) |
计算不同商品销售额日环比
题目:需要按类型先进行分组,在分组内按日期求得当前日期对比前一日期的变化比例
1 | from io import StringIO |
解法:
freq参数用于指定用于计算时序数据的频率
1 | ( |
将相同表头的 DataFrame 合并到一起
题目:在一批 DataFrame 中将有相同表头(列名)的 DataFrame 合并到一起
1 | df1 = pd.DataFrame({'a':[12],'d':[35]}) |
解法
1 | ( |
根据指定列按列合并目录中的 Excel
题目:将实现按目录读取所有 Eexcel 文件,用
pd.concat合并 Dataframe
- 读取目录所有 Excel 文件
- 按 TM 进行合并,将其他文件的内容追加到原文件的后列
- 新文件的列名(字段名)增加文件名的前缀,方便区分
- 合并后数据按 TM 排序
1 | ''' |
解法
1 | import glob |
将连接字符串转为虚拟变量
题目:需求期望将vote_code中的变量转为列,值为对应如果包含则为 1,否则为 0
1 | from io import StringIO |
解法
1 | ( |
将列表转为以字符为键的字典
题目:键是前边的字母,值是字母后边的数字,如果有多个字母则是一个列表
1 | m = ['a',1,'b',13,14,'d',67] |
解法
1 | df = pd.DataFrame({"x": m}) |
缺失值填充为分组的平均值
题目:将这两个缺失值按其所在组的平均值进行填充
1 | df = pd.read_csv('https://gairuo.com/file/data/team.csv') |
解法
1 | # 个人解法 |
根据树状文本解析其上级
题目
1 | from io import StringIO |
解法
1 | ( |
筛选日期连续的数据行
题目:筛选出不分位置日期连续的行
1 | from io import StringIO |
解法
1 | def func(ser: pd.Series) -> bool: |
根据值在其他列中出现的次数指定列值
题目:增加一个名为“Temperature”的新列,当 Container 第一次出现Event为“Clean”时,它的值为4,而所有后续的“Clean“事件的值为3。Dry时的值总是1
1 | import io |
解法
1 | # 官方解法: 使用np.select |
将时间区间展开为年月两列
题目:将数据按起始日期到结束日期展开,增加年和月列
1 | from io import StringIO |
解法
1 | ( |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Ethylene's Blog!

