【问题标题】:bin data depending on values of a separate columnbin 数据取决于单独列的值
【发布时间】:2014-11-13 12:02:55
【问题描述】:

我有一个看起来像这个玩具示例的数据集:

s1 = pd.Series(np.random.rand(5))
s2 = pd.Series(np.random.rand(5) * 10)
cat1 = pd.Series(['s1'] * 5)
cat2 = pd.Series(['s2'] * 5)
s = s1.append(s2).reset_index(drop=True)
c = cat1.append(cat2).reset_index(drop=True)
data = pd.DataFrame({'cat': c,'s': s})
print data

  cat                    s
0  s1                 0.68
1  s1                 0.61
2  s1                 0.43
3  s1                 0.68
4  s1                 0.11
5  s2                 4.82
6  s2                 8.19
7  s2                 3.88
8  s2                 5.51
9  s2                 1.20

我想根据cat 列中的值使用不同的分箱范围对数据进行分箱。这是我尝试过的:

def bucketing_fun(x, cat):
    if cat == 's1':
        return np.digitize([x], s1_buckets)[0]
    else:
        return np.digitize([x], s2_buckets)[0]

data['Buckets'] = data[['s', 'cat']].apply(lambda x: bucketing_fun(x[0], x[1]), axis=1)
print data

这可行,但我在大约 050 万行的真实数据集上存在性能问题。

【问题讨论】:

    标签: python pandas categories dataframe binning


    【解决方案1】:

    您可能会失去矢量化加速

    试试这个:

    buckets = dict(s1=s1_buckets, s2=s2_buckets)
    data['Buckets'] = data.groupby(['cat']).apply(lambda df: np.digitize(df.s, buckets[df.cat.irow(0)]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多