首页 > 解决方案 > python中系列的新列变量

问题描述

我正在尝试使用以下代码对 pd.Series 中的数据进行分类:

for index in range (len(B)):
    if B.loc[index, 'N1', 'N4']:
        B['Category'] = NN1
       
    elif B.loc[index, 'N2', 'N3','N5']:
        B['Category']== NN2

    else return(nan)

没有要遵循的模式,因为我已经对数据进行了预处理,发现 N1 和 N4 属于 NN1 类别。N2、N3 和 N5 也是如此,它们都属于 NN2 类别。

B 是我的数据系列。N1 N2 N3 N4 N5 是我的行索引。“类别”是我想在我的系列中添加的新列。

使用上面提到的代码,我的错误是:

TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <class 'int'>

有谁能帮忙吗?

标签: pythonseries

解决方案


您的代码存在一些问题 - 首先,即使您有一个非数字索引,您也将索引作为整数来处理。其次,你打算作为你的第二个任务实际上是一个布尔表达式。return 语句仅在函数体中才有意义,但在列中没有得到显式赋值的Category行,无论如何都会被赋值nan。由于您需要多个列,因此请使用 DataFrame,而不是 Series。如果您S从其他地方收到一个系列,您可以通过例如从它创建一个 DataFrame

B = pd.DataFrame(S, index=S.index).

有了 B,你就可以做这样的事情

for index in B.index:
    if index in {'N1', 'N4'}:
        B.loc[index, 'Category'] = 'NN1'
    elif index in {'N2', 'N3', 'N5'}:
        B.loc[index, 'Category'] = 'NN2'

更确切地说

for index in ['N1', 'N4']:
    B.loc[index, 'Category'] = 'NN1'
for index in ['N2', 'N3', 'N5']:
    B.loc[index, 'Category'] = 'NN2'

推荐阅读