python pandas 不计算订单对

Han*_*nbo 3 python pandas

我有一个 pandas 数据框,如下所示:

df = pd.DataFrame(data = {
    'v1': ['a', 'a', 'c', 'b', 'd', 'c', 'd', 'c', 'f', 'e'], 
    'v2': ['b', 'b', 'd', 'a', 'c', 'e', 'c', 'd', 'g', 'c'], 
    'v3': range(0,10)})

  v1 v2  v3
0  a  b   0
1  a  b   1
2  c  d   2
3  a  b   3
4  c  d   4
5  c  e   5
6  c  d   6
7  c  d   7
8  f  g   8
9  c  e   9
Run Code Online (Sandbox Code Playgroud)

我想要得到的结果如下:

  v1 v2  count
0  a  b      2
1  c  d      3
2  c  e      2
3  f  g      1
Run Code Online (Sandbox Code Playgroud)

第一行,"a b 2"来自"a b",,"a b""b a"as"a b" 连续出现两次,只计算一次。

第二行"c d 3"来自"c d", "d c", "d c", "c d","d c"连续出现两次

第三行"c e 2"来自"c e","e c"

最后一行"f g 1"来自"f g"

我最初的想法是使用groupby,但我不知道如何跳过连续出现。

cs9*_*s95 5

对前两列进行排序,删除连续的重复项,然后对它们进行计数:

df.iloc[:, :2] = np.sort(df.iloc[:, :2], axis=1)

m = ~df.iloc[:, :2].ne(df.iloc[:, :2].shift()).cumsum().duplicated()
df[m].groupby(['v1', 'v2'], as_index=False).count()

  v1 v2  v3
0  a  b   2
1  c  d   3
2  c  e   2
3  f  g   1
Run Code Online (Sandbox Code Playgroud)