【问题标题】:pandas Grouping based on two variablespandas 基于两个变量的分组
【发布时间】:2020-03-11 15:26:54
【问题描述】:
+---------+---------+-------+
| g_var_1 | g_var_2 | group |
+---------+---------+-------+
| A       | B       | 1     |
+---------+---------+-------+
| B       | A       | 1     |
+---------+---------+-------+
| C       | D       | 2     |
+---------+---------+-------+
| D       | C       | 2     |
+---------+---------+-------+
| E       | F       | 3     |
+---------+---------+-------+
| F       | E       | 3     |
+---------+---------+-------+
| G       | H       | 4     |
+---------+---------+-------+
| H       | G       | 4     |
+---------+---------+-------+

使用熊猫: 我正在尝试基于“g_var_1”和“g_var_2”创建一个“组”变量。从上面的 ASCII 表中可以看出,逻辑是“g_var_1”和 g_var_2”的相同组合被组合在一起。因此 (g_var_1 == "A" 和 g_var_2 == "B") 的观察结果将在与 (g_var_1 == "B" 和 g_var_2 == "A") 的观察相同的组。

我正在使用的数据集有一千多行,因此手动执行此操作对我来说不是最佳解决方案。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: pandas grouping pandas-groupby


    【解决方案1】:

    首先使用sort,然后使用ngroup 和groupby

    l=['g_var_1','g_var_2']
    pd.DataFrame(np.sort(df[l],1),columns=l).groupby(l).ngroup().add(1)
    Out[340]: 
    0    1
    1    1
    2    2
    3    2
    4    3
    5    3
    6    4
    7    4
    dtype: int64
    df['group']=pd.DataFrame(np.sort(df[l],1),columns=l).groupby(l).ngroup().add(1)
    

    .值

    【讨论】:

      【解决方案2】:

      使用组合的g_var 创建一个列,该列存储一个包含两个值的元组。

      为了让它们比较相同,保持元组排序,所以"B", "A"也会变成("A", "B")。

      您可以使用apply() 方法,使用自定义函数来实现该结果。

      def make_tuple_var(row):
          var1 = row['g_var_1']
          var2 = row['g_var_2']
          if var1 > var2:
              # Swap them.
              var1, var2 = var2, var1
          return (var1, var2)
      

      然后你可以用在:

      df['g_var'] = df.apply(make_tuple_var, axis=1)
      

      最后你可以groupby('g_var'),它将所有对等的对组合在一起。

      【讨论】:

      • 感谢您的回答。好主意,从没想过要使用元组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多