【问题标题】:How to combine pandas df so that rows with permuted col1 and col2 values can be merged containing only one combination & summing a count column如何组合 pandas df 以便可以合并具有置换 col1 和 col2 值的行,其中仅包含一个组合并汇总计数列
【发布时间】:2021-10-28 17:42:47
【问题描述】:

我想将排列后的 col1 和 col2 值组合成一行。仅包含第一个组合和对两者的计数列求和。在 pandas 中是否有一种简单的方法可以做到这一点?

示例数据框和输出:例如,在下面的数据框中,我想将具有值 A、B 和 B、A 的行组合起来,并对它们的计数列求和。对于具有值 C、D 和 D、C 的行也是如此,并对它们的计数值求和。我想保持数据框中的其余行不变。

输入:

col1 col2 count
A B 3
C D 2
B A 5
E F 2
G H 8
D C 5
I J 4

输出:

col1 col2 count
A B 8
C D 7
E F 2
G H 8
I J 4

【问题讨论】:

    标签: python pandas dataframe permute


    【解决方案1】:

    你可以.groupby按照col1/col2排序:

    x = (
        df.groupby(df[["col1", "col2"]].apply(lambda x: tuple(sorted(x)), 1))
        .agg({"col1": "first", "col2": "first", "count": "sum"})
        .reset_index(drop=True)
    )
    print(x)
    

    打印:

      col1 col2  count
    0    A    B      8
    1    C    D      7
    2    E    F      2
    3    G    H      8
    4    I    J      4
    

    【讨论】:

      【解决方案2】:

      我们可以跨行np.sort 以确保相同的值出现在正确的列中(例如A BB A 都变成A B),然后groupby sum 出现在现在排序的列中:

      # Sort Across Rows
      df[['col1', 'col2']] = np.sort(df[['col1', 'col2']], axis=1)
      # Accumulate counts by col1 and col2 (now in same columns)
      df = df.groupby(['col1', 'col2'], as_index=False)['count'].sum()
      

      df:

        col1 col2  count
      0    A    B      8
      1    C    D      7
      2    E    F      2
      3    G    H      8
      4    I    J      4
      

      设置(DataFrame 和导入):

      import numpy as np
      import pandas as pd
      
      df = pd.DataFrame({
          'col1': ['A', 'C', 'B', 'E', 'G', 'D', 'I'],
          'col2': ['B', 'D', 'A', 'F', 'H', 'C', 'J'],
          'count': [3, 2, 5, 2, 8, 5, 4]
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        相关资源
        最近更新 更多