计算一个pandas Dataframe的元组

swe*_*eet 2 python tuples count pandas

我有以下内容pandas.DataFrame:

      val1 val2 val3 val4
1      7    8    3    2
2      1    4    5    4
3      5    7    5    3
4      7    8    3    2
5      6    8    1    0
6      0    2    5    7
7      1    4    5    4
8      7    8    3    2
Run Code Online (Sandbox Code Playgroud)

我想计算我的DataFrame中每个元组的数量.预期结果(或多或少):

count     tuple
3         (7, 8, 3, 2)
2         (1, 4, 5, 4)
1         (5, 7, 5, 3)
1         (6, 8, 1, 0)
1         (0, 2, 5, 7)
Run Code Online (Sandbox Code Playgroud)

另请注意,我的真实DataFrame 有数百万个条目,所以我确实需要一些时间优化的解决方案.

直到现在,我的方法是用字符串列转换每个列Series.astype(str),然后连接列,并使用a pandas.Series.value_counts().但我认为可能有一种更快,更自然的方法来解决我的问题.任何人都可以开导我吗?

Rom*_*kar 5

我认为自然的解决方案是使用pandas.DataFrame.groupby:

>>> res = df.groupby(list(df.columns)).size()
>>> res
val1  val2  val3  val4
0     2     5     7       1
1     4     5     4       2
5     7     5     3       1
6     8     1     0       1
7     8     3     2       3
dtype: int64
>>> res.index = [tuple(x) for x in res.index]
>>> res = res.reset_index().set_index(0)
>>> res
          index
0              
1  (0, 2, 5, 7)
2  (1, 4, 5, 4)
1  (5, 7, 5, 3)
1  (6, 8, 1, 0)
3  (7, 8, 3, 2)
Run Code Online (Sandbox Code Playgroud)

然后您可以重命名索引和列