我的原始数据如下:
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
但是当我尝试向此分类数据帧添加新列时,出现以下错误:'cannot insert an item into a CategoricalIndex that is not already an existing category'
我试图将一个新的数据框附加到现有的数据框上,但是没有用……有什么想法吗?谢谢!
答案 0 :(得分:2)
您需要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