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'>

有人可以帮助吗?

解决方法

您的代码有两个问题-首先,即使您有一个非数字索引,您还是将索引作为整数来处理。其次,您打算作为第二个任务实际上是一个布尔表达式。 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','N5']:
    B.loc[index,'Category'] = 'NN2'