Как перебирать входные данные для функции

Как правильно передавать данные в функции с помощью pandas? Код ниже в настоящее время приводит к ошибке:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

Все, что я хочу сделать, это создать выходную матрицу со строками, подчиняющимися условным операторам в функции.

def mixtapeFire(timesPlayed, rating): 
    if timesPlayed >=1000 & rating >=3:
        print('Your mixtape is fire!')

    if rating >5:
        print('Invalid Input. Play Again.')
    else:
        print('You should quit the rap game.')

input1 = pd.DataFrame([900,2000,1001,500,4000])
input2 = pd.DataFrame([3,4,3,1,2])

for x in range(1,5):
    output = pd.DataFrame(mixtapeFire(input1.iloc[x,:],input2.iloc[x,:]))

Пожалуйста, исправьте отступ вашего примера.

wwii 08.04.2019 20:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
a = pd.DataFrame([900,2000,1001,500,4000])
b = pd.DataFrame([3,4,3,1,2])

Сравнение ряда приводит к нескольким значениям.

In [12]: a >= 1000
Out[12]: 
       0
0  False
1   True
2   True
3  False
4   True

In [13]: b >= 3
Out[13]: 
       0
0   True
1   True
2   True
3  False
4  False

In [14]: q = (a >= 1000) & (b >= 3)

In [15]: q
Out[15]: 
       0
0  False
1   True
2   True
3  False
4  False

Используйте .any() или .all() в зависимости от того, что вы хотите.

In [16]: q.any()
Out[16]: 
0    True
dtype: bool

In [17]: q.all()
Out[17]: 
0    False
dtype: bool

Поскольку в результате есть несколько значений True/False, Это не может сказать, является ли вся серия True или False.

In [18]: bool(q)
Traceback (most recent call last):

  File "<ipython-input-18-6fd0a485fec6>", line 1, in <module>
    bool(q)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 955, in __nonzero__
    .format(self.__class__.__name__))

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Большое спасибо! Это прекрасно работающее решение, но мне было интересно, есть ли способ сделать это и сохранить функцию. Например, если функция намного сложнее, ее воспроизведение может занять целую вечность.

Nikita 09.04.2019 16:40

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

wwii 09.04.2019 17:01

Да, извините, теперь, когда я смотрю на это снова, это не очень четко сформулировано. Короче говоря, я хотел научиться выполнять многоклассовую классификацию с помощью классификатора функций [например, дерева решений] и нескольких входных данных. Цель состояла бы в том, чтобы создать выходной массив со строковыми метками, которые сказали бы нам, что есть что.

Nikita 09.04.2019 19:50

Возможно, вам следует удалить этот вопрос и задать тот, который правильно отражает вашу проблему / проблему.

wwii 10.04.2019 04:35

В зависимости от ваших потребностей вы можете применить любой из методов «a» к своим аргументам input1.iloc[x,:],input2.iloc[x,:]. Например:

output = pd.DataFrame(mixtapeFire(input1.iloc[x,:].all(),input2.iloc[x,:].all()))

Вы можете узнать больше о методах доступа панд из официальных документов https://pandas.pydata.org/pandas-docs/stable/reference/series.html

Но в двух словах: вам нужно более конкретно указать, какие значения вы хотите проанализировать.

Другие вопросы по теме