#python #pandas #matplotlib
#python #pandas #matplotlib
Вопрос:
Я хотел бы использовать какие-то условия if для построения графика только в том случае, если значение определенного столбца достигает определенного значения.
Допустим, в приведенном ниже примере я хотел бы построить график, только если значение цикла == 2.
import pandas as pd
import matplotlib.pyplot as plt
data = [('cycle',[1,1,2,2,3,3,4,4]),
('A',[0.1,0.5,0.2,0.6,0.15,0.43,0.13,0.59]),
('B',[ 500, 600, 510,580,512,575,499,598]),
]
df = pd.DataFrame.from_items(data)
#print(df)
x = df['A']
y = df['B']
if df['cycle']==2:
plt.plot(x,y)
если я попробую это, я получу ошибку фауллинга: ValueError: значение истинности ряда неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all().
До сих пор мне не удавалось найти способ решить проблему.
Я благодарен за любую помощь в отношении этой проблемы. Хорошего дня.
Ответ №1:
В этой строке if df['cycle']==2
df['cycle']
возвращается серия pandas. Когда вы сравниваете это с 2
pandas не знает, хотите ли вы сравнивать по элементам или всю серию, это неоднозначно. Что вы могли бы сделать вместо этого, так это отфильтровать таблицу на основе вашего условия или отфильтровать отдельные серии. Например:
df = pd.DataFrame.from_items(data)
#print(df)
x = df.loc[df['cycle'] == 2, 'A']
y = df.loc[df['cycle'] == 2, 'B']
plt.plot(x,y)
Здесь вы используете df['cycle']
как логический ряд для индексации в исходном фрейме данных и возвращаете только те элементы, где cycle
равно 2