Как создать фрейм данных pandas для приведенных ниже условий

#python #python-3.x #pandas #numpy

#python #python-3.x #pandas #numpy

Вопрос:

 import pandas as pd
temp=[79,80,81,80,80,79,76,75,76,78,80,81]
for i in range(len(temp)):
        if temp[i]<=80:
            level=0
        elif temp[i]>80 and temp[i]<=100:
            level=1
        elif temp[i]<=75:
            n_level=0
        elif temp[i]>75 and temp[i]<=95:
            n_level=1//
        df=pd.DataFrame([[temp[i],level]],columns=['temp1','level1','newlevel'])//
        print(df)//
  

Не удается получить результат, который, как ожидается, будет таким

 #temp# ##level## ###newlevel###
79   0     0
80   0     0
81   1     1
  

Комментарии:

1. Пожалуйста, разберитесь с ожидаемым результатом.

2. Способ, которым вы создаете свой фрейм данных, несовместим с конструктором

3. Приведенное выше является одним.. Я добавил изображение! введите описание изображения здесь ! введите описание изображения здесь Я просто хочу знать, можем ли мы напрямую использовать фрейм данных pandas и использовать условия И

Ответ №1:

Пожалуйста, найдите решение ниже, я использовал понимание списка для создания данных, необходимых для построения фрейма данных. Пожалуйста, измените условия внутри списка в соответствии с вашими потребностями. Код и вывод

 import pandas as pd
import numpy as np
temp=[79,80,81,80,80,79,76,75,76,78,80,81]
level=[0 if i<=80 else  1 for i in  temp]
n_level=[0 if i<=75 else  1 for i in  temp]
#print(temp)
#print(level)
#print(n_level)
df=pd.DataFrame({'temp':temp,'level':level,'newlevel':n_level})
df
  

Ответ №2:

Вы можете сгенерировать свой фрейм данных, используя исключительно методы Pandas. Чтобы сгенерировать оба столбца «уровня», достаточно использовать cut:

 df = pd.DataFrame({'temp': temp,
    'level1'  : pd.cut(temp, [0, 80, 1000], labels=[0, 1]),
    'newlevel': pd.cut(temp, [0, 75, 1000], labels=[0, 1])})
  

Примечание: Оба столбца «уровня» выходного фрейма данных имеют тип category.
Если вас это не устраивает, приведите их к int:

 df = pd.DataFrame({'temp': temp,
    'level1'  : pd.cut(temp, [0, 80, 1000], labels=[0, 1]).astype(int),
    'newlevel': pd.cut(temp, [0, 75, 1000], labels=[0, 1]).astype(int)})
  

Комментарии:

1. ты качаешься 🙂 .Спасибо за помощь @Valdi_Bo