如何使用Pandas cut()对记录进行分组?

时间:2018-05-25 22:20:58

标签: python pandas

我的目标是将n条记录分组为4,例如:

0-3
4-7
8-11
etc.

根据其他列中的一列查找每组4的max()值,并创建新数据集或csv文件。 max()操作将在一列上执行,而其他列保持不变。

根据我在这里所做的研究(Stackoverflow),我尝试在我的数据集上自定义并应用此网站上的以下解决方案,但它并没有给我我的期望:

# Group by every 4 row until the len(dataset)
groups = dataset.groupby(pd.cut(dataset.index, range(0,len(dataset),3))
needataset = groups.max()

我得到的结果类似于以下内容:

 
Column 1  Column 2 ... Column n
0. (0,3]
1. (3,6]

max()操作的目标列也未产生预期结果。 我将非常感谢您解决问题的任何指南。

1 个答案:

答案 0 :(得分:0)

这个例子可以帮到你。在这里,我使用步骤5创建0到100之间的一些随机值的DataFrame,并将这些值分组为4(sort_values非常重要,它会让您的生活更轻松)

df = pd.DataFrame({'value': np.random.randint(0, 100, 5)})
df = df.sort_values(by='value')
labels = ["{0} - {1}".format(i, i + 4) for i in range(0, 100, 5)]
df['group'] = pd.cut(df.value, range(0, 105, 5), right=False, labels=labels)
groups = df["group"].unique()

然后我创建一个最大值的数组

max_vals = np.zeros((len(groups)))
for i, group in enumerate(groups):
    max_vals[i] = max(df[df["group"] == group]["value"])

然后从这些最大值中DataFrame

pd.DataFrame({"group": groups, "max value": max_vals})