开发者社区> 问答> 正文

如何同时比较不同数据流中的两个列?

我有两个dataframes,我试图比较两个列(Cat1和Cat2),当Cat1和Cat2相同时,我希望对Prc列中的值求和。 在下面的例子中,唯一满足条件的两行是df[0]的第0行和第4行,它们满足df[1]的第1行和第4行,因此在这种情况下df[0]的和是200 df[1]的和是185。 df[0]

Cat1 Cat2 Cat3 Prc

0 11 0 5 100

1 22 2 9 150

2 33 1 8 50

3 44 2 6 200

4 55 1 8 100

df[1]

Cat1 Cat2 Cat3 Prc

0 66 1 6 120

1 11 0 5 90

2 44 1 6 185

3 77 2 7 145

4 55 1 5 95

如何同时比较不同数据流中的两个列? 这些都是大的dataframes,每行有500,000行,每列有32列,因此我希望避免创建新的dataframes或新列。

展开
收起
游客6qcs5bpxssri2 2019-10-11 16:49:04 2641 0
1 条回答
写回答
取消 提交回答
  • 一个方法是使用DataFrame.merge:

    df1 = df[0].merge(df[1], on=['Cat1','Cat2'], suffixes=('_0','_1'))

    print (df1)

    Cat1 Cat2 Cat3_0 Prc_0 Cat3_1 Prc_1

    0 11 0 5 100 5 90

    1 55 1 8 100 5 95

    print (df1.filter(like='Prc').sum())

    Prc_0 200

    Prc_1 185

    dtype: int64

    另一种方法是:

    s1 = df[0].set_index(['Cat1','Cat2'])['Prc']

    s2 = df[1].set_index(['Cat1','Cat2'])['Prc']

    print (s1[s1.index.isin(s2.index)].sum())

    200

    print (s2[s2.index.isin(s1.index)].sum())

    185

    2019-10-11 16:52:51
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载