我有一个类似
的数据框 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获取此值?
答案 0 :(得分:2)
我认为您需要value_counts
来获取HIJ
中的值大小:
s = df['HIJ'].value_counts()
print (s)
a 10
b 3
Name: HIJ, dtype: int64
对于最大连续值,通过比较移位列cumsum
然后groupby
按列Series
和HIJ
进行比较,得到帮助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