DataFrame 中的条件计数 Python

Conditional Count in DataFrame with Python

我要数一数有多少次:

  1. “增加”到“增加”
  2. “增加”到“减少”
  3. “增加”到“不变”
  4. “减少”到“增加”
  5. “减少”为“减少”
  6. “减少”为“不变”
  7. “不变”改为“增加”
  8. “不变”改为“减少”
  9. “不变”到“不变”

代码必须写成python。

我能想到一种方法不会很有效但会完成工作:

所以基本思路是迭代趋势列。你去制作像 (new_df.trend[i], new_df.trend[i+1]) 这样的元组。然后你用计数器得到一个字典,它是这样的:

{("Increase", "Increase"): 131, ("Increase", "Decrease"): 317, ...}

实际的实现应该是这样的:

from collections import Counter

list_of_tuples = [] 
for i in range(len(new_df.trend) - 1):
    list_of_tuples.append((new_df.trend[i], new_df.trend[i+1]))
occurrences = dict(Counter(list_of_tuples))

我正在创建一个示例数据框来解决这个问题。

import pandas as pd
import numpy as np
df = pd.DataFrame({'id': np.arange(0,16), "trend": ['in','de', 'in', 
'in','in','un','de','de','un','un','de','de','in','de','in','in']})

1st:列出名为 'trend'

的列
val = list(df['trend'])

第二步:创建一个新列表并将每对元组添加到列表中。根据迭代,每个元组包含第一个值及其连续的下一个值。

f = val[0]
list_trend = []

for x in val[1:]:
    list_trend.append((f,x))
    f = x

输出列表会是这样的

第三:通过使用 'Counter',您可以计算该列表中每个唯一对的出现次数。

from collections import Counter
c = Counter(list_trend)
count = c.items()

输出会是这样的

就是这样......