DataFrame 中的条件计数 Python
Conditional Count in DataFrame with Python
我要数一数有多少次:
- “增加”到“增加”
- “增加”到“减少”
- “增加”到“不变”
- “减少”到“增加”
- “减少”为“减少”
- “减少”为“不变”
- “不变”改为“增加”
- “不变”改为“减少”
- “不变”到“不变”
代码必须写成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()
输出会是这样的
就是这样......
我要数一数有多少次:
- “增加”到“增加”
- “增加”到“减少”
- “增加”到“不变”
- “减少”到“增加”
- “减少”为“减少”
- “减少”为“不变”
- “不变”改为“增加”
- “不变”改为“减少”
- “不变”到“不变”
代码必须写成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()
输出会是这样的
就是这样......