Печатать, если несколько столбцов в датафрейме имеют определенные значения - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу печатать «покупать» и «слишком дорого» каждый раз, когда два столбца имеют конкретные значения.

Я пробовал использовать это для цикла while, where ....

df= pd.DataFrame({
'car' : ['BMW','BMW','VW','BMW','VW','VW'],
'price' : [10,5,10,5,5,10]
})
df.head()


 df=
    car price
 0  BMW   10
 1  BMW    5
 2  VW    10
 3  BMW    5
 4  VW     5
 5  VW    10 

Я хочу всего 3 отпечатка, поэтому я использовал цикл while.Переменная count увеличивается и в какой-то момент она остановится:

count=0
while 3-count>0:
    for index, row in df.iterrows():
        if ( (df[['car']]=='BMW') & (df[['price']]==5)  ):
            print('hello')
            count +=1
        elif ( (df[['car']]=='VW') & (df[['price']]==10)  ):
            print('too expensive')
            count +=1

Это мое сообщение об ошибке:

ValueError: Истинное значение DataFrame неоднозначно.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

1 Ответ

1 голос
/ 07 апреля 2019

Вам нужно использовать скалярные значения, возвращаемые iterrows вместо ваших df.filters.

Если вы просто напечатаете междурядья, вы получите следующее:

for index, row in df.iterrows():
    print('car', row[0], 'price', row[1])

car BMW price 10
car BMW price 5
car VW price 10
car BMW price 5
car VW price 5
car VW price 10

Используя это, мы можем получить ваше решение ниже.

count=0
while 3-count>0:
    for index, row in df.iterrows():
        if ( (row[0]=='BMW') & (row[1]==5)  ):
            print('buy')
            count +=1
        elif ( (row[0]=='VW') & (row[1]==10)  ):
            print('too expensive')
            count +=1

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