簡體   English   中英

計算唯一行數 pandas

[英]Count number of unique rows pandas

我想計算 pandas dataframe 中的唯一行數,並添加一個新行作為 count_index ,如示例所示。 以另一種方式,我想復制重復行的索引。

import pandas as pd
df = {'A': [ 8,8,9,9,9,12,12,13,15,15,15],
      'B': [ 1,1,2,2,2,11,11,3,4,4,4],
      'C': [ 10,10,20,20,20,101,101,30,40,40,40],
      'D': [81,81,92,92,92,121,121,134,150,150,150]}
df = pd.DataFrame(df)

print(df.groupby(['A','B','C','D']).size())
#####################################################
      #input
   A    B      C     D
   8    1      10    81 
   8    1      10    81 
   9    2      20    92 
   9    2      20    92 
   9    2      20    92 
  12   11     101   121 
  12   11     101   121 
  13    3      30   134 
  15    4      40   150 
  15    4      40   150 
  15    4      40   150 
 ####################################################
#expected output
    A    B      C     D   Count_index
   8    1      10    81    1
   8    1      10    81    1
   9    2      20    92    2
   9    2      20    92    2  
   9    2      20    92    2
  12   11     101   121    3
  12   11     101   121    3
  13    3      30   134    4
  15    4      40   150    5
  15    4      40   150    5
  15    4      40   150    5

您可以通過計算倒置的.duplicated的數量來做到這一點。 然后,我們可以使用累積來保持對遇到的唯一行數的持續計數。

df['count_index'] = (~df.duplicated(keep="first")).cumsum()

print(df)
     A   B    C    D  count_index
0    8   1   10   81            1
1    8   1   10   81            1
2    9   2   20   92            2
3    9   2   20   92            2
4    9   2   20   92            2
5   12  11  101  121            3
6   12  11  101  121            3
7   13   3   30  134            4
8   15   4   40  150            5
9   15   4   40  150            5
10  15   4   40  150            5


您可以使用diff().ne(0)df.ne(df.shift())的組合

df.diff().ne(0).all(axis=1).cumsum()

或者

df.ne(df.shift()).all(axis=1).cumsum()

Output:

0     1
1     1
2     2
3     2
4     2
5     3
6     3
7     4
8     5
9     5
10    5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM