格式化并分组我的DataFrame后,我创建了以下pivot_table,它显示了给定凭据的M和F的数量:
Gender F M
Credential
AA 105.0 117.0
AU 870.0 249.0
CNA 6309.0 5276.0
我接下来要做的是插入另一列,其中给定凭证的比率为F到M.例如:
Gender F M Ratio
Credential
AA 105.0 117.0 0.8974
AU 870.0 249.0 3.4939
CNA 6309.0 5276.0 1.1957
我遇到了无法添加新列的问题,因为它不是一个类别。
TypeError: cannot insert an item into a CategoricalIndex that is not already an existing category
我相信这是有道理的,因为没有"性别"叫"比率"那不是我想要的。有没有人有什么建议?我认为它会如此简单:
df["Ratio"] = df["F"] / df["M"]
但显然不是。
编辑:
如果没有为原始DataFrame输入新列,可能是从原始DataFrame中提取数据并使用该Ratio列创建新的DataFrame?
EDIT2:
以下是重现的步骤:
df = pd.DataFrame({
'Credential': np.random.choice(['AA', 'AU', 'CNA'], 100),
'Gender': np.random.choice(['F', 'M'], 100),
'Counts': np.random.randn(100)
})
df['Gender'] = df['Gender'].astype('category')
dfNew = pd.pivot_table(df, values='Counts', index='Credential', columns="Gender")
dfNew["Ratio"] = dfNew["F"] / dfNew["M"]
EDIT3(解决方案代码):
以下是解决错误的步骤:
df = pd.DataFrame({
'Credential': np.random.choice(['AA', 'AU', 'CNA'], 100),
'Gender': np.random.choice(['F', 'M'], 100),
'Counts': np.random.randn(100)
})
df['Gender'] = df['Gender'].astype('category')
dfNew = pd.pivot_table(df, values='Counts', index='Credential', columns="Gender")
# Changing from categoricals
dfNew.columns = dfNew.columns.tolist()
dfNew["Ratio"] = dfNew["F"] / dfNew["M"]