在不迭代Python的情况下计算大数据帧中的模式出现次数

2024-04-18 21:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

    Jack   Joe   Mary
1    I      O     O
2    I      O     I
3    I      I     I
4    O      I     I
5    O      I     O
6    I      O     O
7    I      O     I
8    I      O     I
9    O      I     I
10   O      I     O
      ....

我的专栏里到处都是“I”和“O”的图案。你知道吗

我想计算每列中出现'I'和'O'的次数。你知道吗

我知道我可以遍历每一列的每一行,但这是一个非常大的数据帧。你知道吗

有没有人有1)一个更有效的方法来做这件事,2)一个更像Python的方法来做这件事?你知道吗

谢谢。你知道吗


Tags: 数据方法次数jack图案joemary专栏
3条回答

我要做什么

s=(df.shift()==df).ne(True).cumsum()# create the group key, class all continue value to one group
for x in s.columns:
    print(x,df[x].groupby(s[x]).apply(''.join).isin(['III','OOO']).sum())
Jack 2
Joe 2
Mary 2

IIUC公司:

您正在计算IIIOOO发生的次数。我会在琴弦处细数

s = df.sum()
pd.concat({k: s.str.count(k) for k in ['III', 'OOO']}).unstack()

     Jack  Joe  Mary
III     2    1     2
OOO     0    1     0 

您会注意到,这将'IIII'计为'III'的一个实例。你知道吗

以“Jack”列和“I”模式为例。你知道吗

通过移动,我们得到

>>> (df.Jack == df.Jack.shift(1)) & (df.Jack == df.Jack.shift(2)) & (df.Jack == 'I')
1     False
2     False
3      True
4     False
5     False
6     False
7     False
8      True
9     False
10    False
Name: Jack, dtype: bool

所以呢

((df.Jack == df.Jack.shift(1)) & (df.Jack == df.Jack.shift(2)) & (df.Jack == 'I')).sum() 

给出阵列在列中的出现次数。你知道吗

您可以轻松地将其修改为其他模式和列。你知道吗

注意,“I”将算作两次出现的模式(交错)。你知道吗

相关问题 更多 >