gpt4 book ai didi

python - 在 Python 中对 pandas 中的数据框进行分箱

转载 作者:IT老高 更新时间:2023-10-28 21:43:35 25 4
gpt4 key购买 nike

鉴于 pandas 中的以下数据框:

import numpy as np
df = pandas.DataFrame({"a": np.random.random(100), "b": np.random.random(100), "id": np.arange(100)})

其中 id 是由 ab 值组成的每个点的 id,我怎样才能 bin ab 放入一组指定的 bin 中(这样我就可以在每个 bin 中取 ab 的中值/平均值)?对于 df 中的任何给定行,df 可能具有 ab(或两者)的 NaN.

这是一个使用 Joe Kington 的解决方案的更好的示例,该解决方案具有更真实的 df。我不确定的是如何访问下面每个 df.a 组的 df.b 元素:

a = np.random.random(20)
df = pandas.DataFrame({"a": a, "b": a + 10})
# bins for df.a
bins = np.linspace(0, 1, 10)
# bin df according to a
groups = df.groupby(np.digitize(df.a,bins))
# Get the mean of a in each group
print groups.mean()
## But how to get the mean of b for each group of a?
# ...

最佳答案

可能有更有效的方法(我觉得 pandas.crosstab 在这里会很有用),但我会这样做:

import numpy as np
import pandas

df = pandas.DataFrame({"a": np.random.random(100),
"b": np.random.random(100),
"id": np.arange(100)})

# Bin the data frame by "a" with 10 bins...
bins = np.linspace(df.a.min(), df.a.max(), 10)
groups = df.groupby(np.digitize(df.a, bins))

# Get the mean of each bin:
print groups.mean() # Also could do "groups.aggregate(np.mean)"

# Similarly, the median:
print groups.median()

# Apply some arbitrary function to aggregate binned data
print groups.aggregate(lambda x: np.mean(x[x > 0.5]))

编辑:由于 OP 专门要求 b 的方法由 a 中的值分箱,所以只需执行

groups.mean().b

此外,如果您希望索引看起来更好(例如,将间隔显示为索引),就像在 @bdiamante 的示例中所做的那样,请使用 pandas.cut 而不是 numpy.digitize。 (向比达曼特致敬。我没有意识到 pandas.cut 存在。)

import numpy as np
import pandas

df = pandas.DataFrame({"a": np.random.random(100),
"b": np.random.random(100) + 10})

# Bin the data frame by "a" with 10 bins...
bins = np.linspace(df.a.min(), df.a.max(), 10)
groups = df.groupby(pandas.cut(df.a, bins))

# Get the mean of b, binned by the values in a
print groups.mean().b

这会导致:

a
(0.00186, 0.111] 10.421839
(0.111, 0.22] 10.427540
(0.22, 0.33] 10.538932
(0.33, 0.439] 10.445085
(0.439, 0.548] 10.313612
(0.548, 0.658] 10.319387
(0.658, 0.767] 10.367444
(0.767, 0.876] 10.469655
(0.876, 0.986] 10.571008
Name: b

关于python - 在 Python 中对 pandas 中的数据框进行分箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947336/

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