2024-04-18 21:32:29 发布
网友
我有以下数据帧:
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的方法来做这件事?你知道吗
谢谢。你知道吗
我要做什么
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公司:
您正在计算III或OOO发生的次数。我会在琴弦处细数
III
OOO
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'的一个实例。你知道吗
'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”将算作两次出现的模式(交错)。你知道吗
我要做什么
IIUC公司:
您正在计算
III
或OOO
发生的次数。我会在琴弦处细数您会注意到,这将
'IIII'
计为'III'
的一个实例。你知道吗以“Jack”列和“I”模式为例。你知道吗
通过移动,我们得到
所以呢
给出阵列在列中的出现次数。你知道吗
您可以轻松地将其修改为其他模式和列。你知道吗
注意,“I”将算作两次出现的模式(交错)。你知道吗
相关问题 更多 >
编程相关推荐