【发布时间】:2017-06-04 16:09:09
【问题描述】:
我需要在DataFrame 的cuts 上记录cuts(子箱)。
如果每个cut 的子bin 边界都相同,这非常简单。例如,
df = pd.DataFrame({'A':np.random.random(100), 'B':np.random.random(100)})
# Primary bins: quintiles on column A
df['P'] = pd.qcut(df['A'], 5, labels=range(1,6)).astype(int)
# Secondary bins: quartiles on column B
df['Q'] = df.groupby(['P'])['B'].transform(lambda x: pd.qcut(x, 4, labels=range(1,5)))
但是,当每个主要 cut 的 cut 边界不同时,我不知道如何使用转换函数,甚至不知道如何将第二个 cut 值返回到 DataFrame 中。例如,
subBinBounds = [[0, .1, .5, 1],[0, .3, .6, 1],[0, .2, .7, 1],[0, .4, .6, 1][0, .2, .5, 1]]
for i in range(5):
cut = df[df['P'] == i+1] # P is in {1, 5}
subbin = pd.cut(cut['B'], subBinBounds[i], labels=range(1,4))
cut['Q'] = cut.assign(Q=subbin.values)
# But how do we get 'Q' back into df?
【问题讨论】:
标签: pandas dataframe lambda merge group-by