如何自动对一组数字进行分类



上下文是:我有一个风速列表,让我们想象一下,从0到50公里/小时的100次风速测量,所以我想通过上传csv来自动创建一个列表,让我们想象一下,每5公里/小时,也就是从0到5的那些,从5到10的那些…等。

让我们进入代码:

wind = pd.read_csv("wind.csv")
df = pd.DataFrame(wind)
x = df["Value"]
d = sorted(pd.Series(x))
lst = [[] for i in range(0,(int(x.max())+1),5)]

这给了我一个空列表列表,即如果风速从0到54公里/小时将创建11个空列表。

现在,为了分类,我这样做:

for i in range(0,len(lst),1):
for e in range(0,55,5):
for n in d:
if n>e and n< (e+5):
lst[i].append(n)
else:
continue

我的目标是当它到达一个大于5的数字时,它跳到下一层,也就是说,它将5加到区间(e)的极限上,并跳到下一个i来填充lst中的第二个空列表。我尝试了几种方法,因为我认为循环必须按照特定的顺序进行才能得到好的结果。这段代码只是我尝试过的几个例子中的一个,但它们都给了我类似的结果,要么所有的列表都充满了所有的数字,要么只有第一个列表充满了所有的数字

你的标题提到分类数字——你是在寻找像calm | gentle breeze | strong breeze | moderate gale | etc.这样的分类输出吗?如果是这样,请查看pd.qcut文档中的第二个示例。

因为你已经在使用pandas,使用pd.cutIntervalIndex(用pd.interval_range函数构造)来获得箱子的Series,然后groupby

import pandas as pd
from math import ceil
BIN_WIDTH = 5
wind_velocity = (pd.read_csv("wind.csv")["Value"]).sort_values()
upper_bin_lim = BIN_WIDTH * ceil(wind_velocity.max() / BIN_WIDTH)
bins = pd.interval_range(
start=0,
end=upper_bin_lim,
periods=upper_bin_lim//BIN_WIDTH,
closed='left')
velocity_bins = pd.cut(wind_velocity, bins)
groups = wind_velocity.groupby(velocity_bins)
for name, group in groups:
#TODO: use `groups` to do stuff

最新更新