我有一个关于在python pandas中进行binning的小问题。
我有一个如下数据框:
df =
variable test_score
-1 52.0
1 53.0
4 54.0
6 64.0
6 64.0
-6 64.0
5 71.0
10 73.0
-15 75.0
4 77.0
....... etc, etc....
我想关于列/变量"变量",以便相同数量的行" X" (比如100)出现在每个"变量"箱中。
然后,我想将每个变量bin((variable_bin_min + variable_bin_max)/ 2)的中心值与该变量bin的测试分数的平均值进行分散。
我看不到一个简单的方法来做这件事,并会感激任何指导!
答案 0 :(得分:1)
这应该完成它。我制作了数据,所以它看起来不像你的。
import pandas as pd
import numpy as np
np.random.seed([3,1415])
df = pd.DataFrame(dict(variable=np.random.choice(range(20), (1000,)),
test_score=np.random.rand(1000,).round(2) * 100))
df_ = df.groupby(pd.qcut(df.variable, len(df) / 100)).agg([np.min, np.max, np.mean])
pd.concat([df_.variable.apply(lambda x: x.loc[['amin', 'amax']].mean(), axis=1),
df_.test_score['mean']],
axis=1,
keys=['bin_center', 'mean_score']).plot.scatter('bin_center', 'mean_score')
答案 1 :(得分:1)
对于包含5个项目的bin,然后pd.cut()进一步切片数据:
LL = df['test_score'].tolist()
bins = LL[::5]