python - Pandas:向分类数据框添加一列

标签 python pandas

我的原始数据如下所示:

Bin         A     B     C
CPB%                     
0.00000     0    57  1728
0.00100     0  1579  1240
0.00200  1360   488   869
0.00300   184   499   597
0.00400   265   283   461

我通过该代码获得了它:

import operator
bins = np.linspace(0, 1, num=1000)

df_b = pd.crosstab(pd.cut(df['CPB%'], bins=bins).map(operator.attrgetter('left')), df.Bin)

我尝试做的事情如下:

totalb = df_b['A'].sum()
idxb = totalb
proba_b = []


for index, row in df_b.iterrows():
    idxb = idxb - row['A']
    prob = float(idxb)/float(totalb)
    proba_b.append(prob)

df_b['Proba-b'] = proba_b

但是当我尝试向此分类数据框添加新列时,出现以下错误:“无法将项目插入尚不存在类别的 CategoricalIndex”

我尝试将一个新的数据框附加到现有的数据框,但没有成功...知道吗?谢谢!

最佳答案

您需要CategoricalIndex.add_categories通过新列名称添加新类别:

df_b.columns = df_b.columns.add_categories('Proba-b')
df_b['Proba-b'] = proba_b
print (df_b)

          A     B     C   Proba-b
Bin                              
0.000     0    57  1728  1.000000
0.001     0  1579  1240  1.000000
0.002  1360   488   869  0.248203
0.003   184   499   597  0.146490
0.004   265   283   461  0.000000

为了提高性能,可以使用 iterrows:

s = df_b['A']
df_b['Proba-b'] = (s.iloc[::-1].cumsum()).shift().fillna(0) / s.sum()
print (df_b)

          A     B     C   Proba-b
Bin                              
0.000     0    57  1728  1.000000
0.001     0  1579  1240  1.000000
0.002  1360   488   869  0.248203
0.003   184   499   597  0.146490
0.004   265   283   461  0.000000

关于python - Pandas:向分类数据框添加一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145650/

相关文章:

python - 使 python 排序/比较与 GNU 排序相同

python - 何时应在 TensorFlow 中使用 tf.losses.add_loss()?

python - 如何根据列值对 Pandas 数据框进行切片?

python - 通过将列与行 pandas python 中的 NaN 值进行匹配,将数据框中的一行添加到另一行中

python - 在python中将键从字典转换为int

python - Scrapy setup ubuntu 16.04 或任何其他

python - 如何根据特定条件、特定列和特定行更新数据框中的值?

python - 将多行合并为 1 行

python - 在 pandas 数据帧中查找相邻行的开/关信号或值对

python - 从 redis 与 python 中的内存进行基准检索(使用 timeit)