gpt4 book ai didi

python - 如何通过计算将数据帧行划分为 bin

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:22 27 4
gpt4 key购买 nike

我有一个像

这样的数据框
df = pd.DataFrame({'x':[1,1,3,7,8,8,9], 'y':[1,0,1,1,1,0,1]})
df
x y
0 1 1
1 1 0
2 3 1
3 7 1
4 8 1
5 8 0
6 9 1

我想将其划分为 bins [(1,3), (3,5), (5,7), (7,9), (9,11)](左向包含,右向不包含) .对于每个组,我想获得进入 bin 的行数,以及每个组中 1 的部分。

结果应该是另一个数据框

result = pd.DataFrame({'LB':[1,3,5,7,9], 'RB':[2,4,6,8,10], 'N':[2,1,0,3,1], 'Pcnt1':[.5,1,np.nan,2/3,1]})
print(result)
LB N Pcnt1 RB
0 1 2 0.500000 2
1 3 1 1.000000 4
2 5 0 NaN 6
3 7 3 0.666667 8
4 9 1 1.000000 10

我该怎么做?

最佳答案

你可以做类似的事情

bin_edges = [1,3,5,7,9,11]
bins = pd.cut(df.x, bin_edges, right=False)

df_new = pd.DataFrame({"LB": bin_edges[:-1], "RB": bin_edges[1:]})
binned = df.groupby(bins.values.codes)["y"]
df_new["N"] = binned.count()
df_new["N"] = df_new["N"].fillna(0)
df_new["Pcnt1"] = binned.mean()

给出

>>> df_new
LB RB N Pcnt1
0 1 3 2 0.500000
1 3 5 1 1.000000
2 5 7 0 NaN
3 7 9 3 0.666667
4 9 11 1 1.000000

(这使用 RB 独占约定。)


这里所有的艰苦工作都由 pd.cut 完成,它返回类别 dtype 的系列:

>>> bins
0 [1, 3)
1 [1, 3)
2 [3, 5)
3 [7, 9)
4 [7, 9)
5 [7, 9)
6 [9, 11)
Name: x, dtype: category
Categories (5, object): [[1, 3) < [3, 5) < [5, 7) < [7, 9) < [9, 11)]

因为我们想在边界上对齐,所以我下降到底层的 bin 索引:

>>> bins.values.codes
array([0, 0, 1, 3, 3, 3, 4], dtype=int8)

请注意,如果我们有一个不适合 bin 的元素,比如 100,那么分类将给出 NaN 和代码 -1,因此当我们插入 df_new 时它会(正确地)被跳过。

关于python - 如何通过计算将数据帧行划分为 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31578062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com