Pandas 将剪切列添加到 DataFrame

Posted

技术标签:

【中文标题】Pandas 将剪切列添加到 DataFrame【英文标题】:Pandas add column from cuts to DataFrame 【发布时间】:2017-06-04 16:09:09 【问题描述】:

我需要在DataFramecuts 上记录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)))

但是,当每个主要 cutcut 边界不同时,我不知道如何使用转换函数,甚至不知道如何将第二个 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?

【问题讨论】:

【参考方案1】:

您可以将concat subseries 附加到sers - list of Series 的循环中。

#for testing - get same output of random functions
np.random.seed(100)
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)

sers = []
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]
    subbin = pd.cut(cut['B'], subBinBounds[i], labels=range(1,4))
    sers.append(subbin)

df['Q'] = pd.concat(sers)
print (df.head(10))
          A         B  P  Q
0  0.543405  0.778289  3  3
1  0.278369  0.779598  2  3
2  0.424518  0.610328  3  2
3  0.844776  0.309000  5  2
4  0.004719  0.697735  1  3
5  0.121569  0.859618  1  3
6  0.670749  0.625324  4  3
7  0.825853  0.982408  5  3
8  0.136707  0.976500  1  3
9  0.575093  0.166694  3  1

【讨论】:

嗯,我不知道有什么问题,但如果我使用range(1, 6),我会得到IndexError: list index out of range。对你来说效果很好? 没错,你也可以使用range(5),查看编辑后的答案。 @feetwet - 谢谢。

以上是关于Pandas 将剪切列添加到 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

如何合并两个数据框? [复制]

Pandas:将系列添加到按列排序的 DataFrame

使用 else if 逻辑将条件列添加到 Pandas 数据框 - Python

将特定信息添加到pandas变形的特定列中

根据多个条件将新列添加到 Python Pandas DataFrame [重复]

迭代地添加计算列,然后将新数据添加到 Pandas 数据框(python 3.7.1)