Проблемы с условным циклом - PullRequest
0 голосов
/ 16 октября 2019

У меня есть исходный фрейм данных:

 A | B | C | D        |  E
one| AA| 4 | 24.07.19 |25.07.19
two| AA| 1 | 24.07.19 |25.07.19
one| AB| 3 | 24.07.19 |25.07.19
two| AC| 1 | 24.07.19 |25.07.19
two| AD| 1 | 24.07.19 |25.07.19
one| AD| 2 | 24.07.19 |25.07.19

Элементы в столбце B могут иметь только два параметра из столбца A (один, два). Я пытаюсь создать графики для каждого элемента в столбце B.
Идея состоит в том, что если элемент имеет оба параметра, создайте один вид графика, если нет => другой.

Но я застрял напроблема в том, что всякий раз, когда я пытаюсь выполнить условие, которое я получаю, или значение Истина является неоднозначной ошибкой, или работает только другая часть, даже если элемент имеет два параметра.

Как это может звучать в псевдокоде:

ЕСЛИ у элемента есть «один» И «два» в столбце «А»:
сделать что-то
В противном случае (если элемент имеет «один» ИЛИ «два» в столбце «А»):
сделать еще один

Мой код:

items = df['A'].unique()

for item in items:
    aa= df[df['B']==item][df['A'].isin(['one','two'])].reset_index(drop=True)
    aa = aa[aa['C']<500].reset_index(drop=True)
    if (aa['A'].values[0]=='one') & (aa['A'].values[0]=='two'):
       print('yes')
    else:
       print('no')

Заранее благодарен за помощь

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Я полагаю, что это избавит вас от ошибки:

aa = df[(df['B']==item)&(df['A'].isin(['one','two']))].reset_index(drop=True)

Но у вас все еще есть:

if (aa['A'].values[0]=='one') & (aa['A'].values[0]=='two'):
    ...

Что никогда не будет True, поскольку вы тестируете одно и то жебыть и one, и two.

При этом говорят, что вы, возможно, захотите пойти с or там:

if (aa['A'].values[0]=='one') | (aa['A'].values[0]=='two'):
    ...

РЕДАКТИРОВАТЬ

Полагаю, это то, что вы ищете:

for item in items:
    aa= df[(df['B']==item)&(df['A'].isin(['one','two']))].reset_index(drop=True)
    aa = aa[aa['C']<500].reset_index(drop=True)
    if ('one' in aa['A'].values) & ('two' in aa['A'].values):
       print('yes')
    else:
       print('no')

#yes
#no
#no
#yes
0 голосов
/ 16 октября 2019

Если вы хотите узнать, сколько значений столбца «A» существует для каждого значения в столбце «B», вы можете сделать:

counts = df[['A', 'B']].drop_duplicates().groupby('B').count().reset_index().rename({'A': 'A_counts'}, axis=1)

Затем вы можете объединить counts в dfс:

df = df.merge(counts, how='left')

И в df у вас будет столбец A_counts, в котором для каждого значения в столбце «B» указано, сколько элементов в столбце «A» имеется, поэтому вы можете выполнить условияв этом новом столбце.

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