+---------+---------+-------+
| 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”)的观察组相同。
我正在使用的数据集具有一千多行,因此手动执行此操作不是我的最佳解决方案。
任何帮助将不胜感激。预先感谢!
答案 0 :(得分:2)
首先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)
.values
答案 1 :(得分:1)
使用合并的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')
,它将所有等效对组合在一起。