我需要记录DataFrame
的cut
(子区间)上的cut
。
如果每个cut
的子区间边界相同,那么这非常简单。例如:
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
值重新放回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?
range(1, 6)
,我会得到IndexError: list index out of range
。你这边可以正常工作吗? - jezraelrange(5)
,请参考编辑后的答案。 - jezrael