我有一个 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,但我不知道如何跳过连续出现。
对前两列进行排序,删除连续的重复项,然后对它们进行计数:
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)