看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
DataFrame 是一个典型的二维数组,和我们日常使用的 Excel 一样,因此, pandas 可以将 Excel 问题转化为对 DataFrame 的操作。在本例中,我们完成一个常见的表格合并汇总。
假定以下数据是从 Excel 中读取,我们构造数据如下:
import pandas as pd
columns = ['车费', '午餐']
df1 = pd.DataFrame([(1, 2), (3, None)],
columns=columns,
index=['张三', '李四'])
df2 = pd.DataFrame([(None, 4), (7, 8)],
columns=columns,
index=['李四', '张三'])
df1
'''
车费 午餐
张三 1 2.0
李四 3 NaN
'''
df2
'''
车费 午餐
李四 NaN 4
张三 7.0 8
'''
数据为两个报销表,分别包含了两个人两次的打车费和午餐费,其中李四在第一次没有车费,第二次没有餐费。
需求为,将这两个表合并为一个汇总的表,计算出两个人总的车费和餐费,最后再增加一个合计。
之前我们在案例Python 汇总 Excel 多张工作表数据中有类似的需求,不过这是两个文件,而且包含缺失值。但,总体思路是一致的。
两个 DataFrame 可以向量化计算,包含相加,相加时会按照行列标签将对应位置的值做加法,而不需要我们写循环代码。
合计汇总时,可以用 assign() 指定一个新列。
直接对两个 DataFrame 做向量加法:
df1 + df2
'''
车费 午餐
张三 8.0 10.0
李四 NaN NaN
'''
但由于缺失值不参与计算,我们得到的李四的值全是缺失的。这时,我们可以先将两个表的缺失值填充为 0 再相加,便得到了正常的结果。
df1.fillna(0) + df2.fillna(0)
'''
车费 午餐
张三 8.0 10.0
李四 3.0 4.0
'''
以上的操作,可以使用 add() 方法,它的 fill_value 参数可指定计算时缺失值的填充值。
df1.add(df2, fill_value=0)
'''
车费 午餐
张三 8.0 10.0
李四 3.0 4.0
'''
这样代码会更加简单。最后用 assign() 指定一个新列:
(
df1.add(df2, fill_value=0)
.assign(合计=lambda x: x.sum(1))
)
'''
车费 午餐 合计
张三 8.0 10.0 18.0
李四 3.0 4.0 7.0
'''
这样就完成了我们想要的结果。
(完)
更新时间:2024-08-18 16:35:07 标签:pandas python 合并