如何在pandas中统计两个DataFrame重复行对应列的数值和
报错原因
- 列名引用错误:代码中的
2019-12-01未加引号,Python会将其识别为算术表达式2019-12-1,计算结果为2006,无法匹配到实际的字符串格式列名 - 拼接逻辑错误:按
axis=1横向拼接两个DataFrame仅按行索引对齐,不会自动匹配make列的取值,会把不同品牌的行错误拼接到同一行,完全不符合需求 - 重复值判断逻辑错误:横向拼接后会出现两个
make列,duplicated方法指定subset=['make']时无法明确判断哪一列的重复值,触发了真值歧义报错
高效实现方案
针对大数据量场景,使用inner关联直接取两个DataFramemake列的交集,是性能最优的实现方式,不需要处理全量无关数据,内存占用低、运行速度快:
import pandas as pd # 仅取需要的列做关联,自动匹配两个表中都存在的make common_df = pd.merge( df1[['make', '2019-12-01']], df2[['make', '2018-12-01']], on='make', how='inner' ) # 分别求和后取最小值 sum_df1 = common_df['2019-12-01'].sum() sum_df2 = common_df['2018-12-01'].sum() flow = min(sum_df1, sum_df2) print(flow)
如果单个DataFrame中存在make列重复的情况,可以先按make分组聚合后再关联,避免产生笛卡尔积:
# 先各自按make分组求和,再做关联 df1_agg = df1.groupby('make', as_index=False)['2019-12-01'].sum() df2_agg = df2.groupby('make', as_index=False)['2018-12-01'].sum() common_df = pd.merge(df1_agg, df2_agg, on='make', how='inner') sum_df1 = common_df['2019-12-01'].sum() sum_df2 = common_df['2018-12-01'].sum() flow = min(sum_df1, sum_df2)
内容的提问来源于stack exchange,提问作者arnoldhenry
相关产品推荐
相关产品推荐

