Функция Def с for для l oop, выдающая ошибку, поскольку "объект типа 'int' не имеет len ()", "произошел с индексом 0" - PullRequest
0 голосов
/ 16 апреля 2020
a = pd.DataFrame({"A":['a', 'a','b','c','a','b','c','b','c','c'],
                  "C":[0.4,0.38,0.42,0.85,0.22,0.38,0.38,0.11,0.21,0.21]})

a['B'] = a.groupby("A").cumcount()+1
a = a.sort_values(by=['A','B'])
a = a.reset_index()
a['D'] = pd.DataFrame(round(a.groupby('A')['C'].cumsum(),2))
a['E'] =""
a['F'] =""
a['J'] =""

for i in range(len(a.B)):
        if a.B[i]<=1:
            if a.D[i] <1:
                a.E[i] = 'No'
            else:
                a.E[i] = 'Yes'
        else:
            if a.D[i-1]>=1:
                a.E[i]='NA'
            else:
                if a.D[i]<1:
                    a.E[i]='No'
                else:
                    a.E[i]='Yes'
i=i+1

Я определил выше l oop в функции, но я получил ошибку, поскольку "объект типа 'int' не имеет len ()", "произошел с индексом 0"

def five(x,y,z):
for i in range(len(x)):
    if x[i]<=1:
        if y[i]<1:
            z[i]='No'
        else:
            z[i]='Yes'
    else:
        if y[(i-1)]>=1:
            z[i]='N/A'
        else:
            if y[i]<1:
                z[i]='No'
            else:
                z[i]='Yes'

a ['E'] = a.apply (лямбда-строка: пять (строка ['B'], строка ['D'], строка ['E']), ось = 1)

1 Ответ

0 голосов
/ 16 апреля 2020

Когда вы используете lambda в apply с axis=1, каждая строка передается функции. Таким образом, в вашем случае five(...) получает одну строку, поэтому x, который равен row['B'], по сути является integer вместо list.

См. эту статью для использование apply с lambda.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...