我的原始数据如下所示:
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/