寻找熊猫的外观

时间:2017-04-09 14:53:39

标签: python pandas numpy

我有一个类似

的数据框
  ABC  EFG  HIJ

1 a#@! !@#  a

2 a#@! !@#  b

3 a#@! !@#  a

4 a#@! !@#  b

5 a#@! !@#  a

6 a#@! !@#  a    

7 a#@! !@#  a

8 a#@! !@#  a

9 a#@! !@#  a

10 a#@! !@#  a

....

666666 a#@! !@#  a

666667 a#@! !@#  b

666668 a#@! !@#  a

我想知道这就像

a:300000(值'a'计数)

b:366668(值'b'计数)

最大长度外观a:11

最大长度外观b:5

如何使用pandas和numpy获取此值?

1 个答案:

答案 0 :(得分:2)

我认为您需要value_counts来获取HIJ中的值大小:

s = df['HIJ'].value_counts()
print (s)
a    10
b     3
Name: HIJ, dtype: int64

对于最大连续值,通过比较移位列cumsum然后groupby按列SeriesHIJ进行比较,得到帮助s1并汇总{{3} }}。输出为MultiIndex,因此另一个groupby是第一级并汇总max

s1 = (df['HIJ'] != df['HIJ'].shift()).cumsum()
print (s1)
1         1
2         2
3         3
4         4
5         5
6         5
7         5
8         5
9         5
10        5
666666    5
666667    6
666668    7
Name: HIJ, dtype: int32
print (df.groupby(['HIJ', s1]).size().groupby(level=0).max())
HIJ
a    7
b    1
dtype: int64

---

如果需要按多列计数:

s = df.groupby(['ABC','EFG','HIJ']).size().reset_index(name='COUNT')
print (s)
    ABC  EFG HIJ  COUNT
0  a#@!  !@#   a     10
1  a#@!  !@#   b      3
s = df.groupby(['ABC','EFG','HIJ', s1]).size()
      .groupby(level=[0,1,2]).max().reset_index(name='LONGEST')
print (s)
    ABC  EFG HIJ  LONGEST
0  a#@!  !@#   a        7
1  a#@!  !@#   b        1