Pandas数据帧:如何在没有机器学习的情况下按值聚集组?

时间:2016-06-29 00:04:58

标签: python pandas dataframe group-by

我有以下pandas DataFrame。

import pandas as pd
df = pd.read_csv('filename.csv')

print(df)

      A       B         C           D
0     2       0         11          0.053095
1     2       0         11          0.059815
2     0       35        11          0.055268
3     0       35        11          0.054573
4     0       1         11          0.054081
5     0       2         11          0.054426
6     0       1         11          0.054426
7     0       1         11          0.054426
8     42      7         3           0.048208
9     42      7         3           0.050765
10    42      7         3           0.05325

    ....

问题是,数据自然地“聚集”成组,但是没有给出这些数据。根据以上所述,行0-1是一组,行2-3是组,行4-7是组,8-10是组。

我需要归咎于这些信息。人们可以使用机器学习;但是,是否可以仅使用熊猫来做到这一点?

用户可以通过列的值进行分组来创建这些组吗?问题是值不是完全。对于第三组,列B具有组1,2,1,1。

1 个答案:

答案 0 :(得分:1)

纯熊猫解决方案将涉及分箱,假设您的值彼此接近且您的箱尺寸足够大以适应群集变化但小于群集值之间的距离。答案取决于您的数据。

分箱方法使用pandas中的cut函数。您提供了一系列(或数组)以及您希望该功能的容器数量。该函数将系列的范围均匀地细分为给定的二进制数,并确定输入中每个值的下降位置。下面一组列的输出将是值落入哪个bin,并且将按照您原来的思路进行分组。

对于大小为5的箱子,实际出现的方式是

for col in df.columns:
   binned_name = col + '_binned'
   num_bins = np.ceil(df[col].max()/5)
   df[binned_name] = pd.cut(df[col],num_bins,labels=False)