Может кто-нибудь объяснить интуицию циклов при использовании на датафреймах? - PullRequest
1 голос
/ 04 апреля 2019

Я хочу полностью понять, что делает каждая строка кода, поскольку в настоящее время я не уверен на 100%.Код из серии учебных пособий, которые я наблюдаю на PythonProgramming.net.

Я полагаю, что первый оператор «If» добавляет столбцы в фрейм данных act_min_wage и затем переименовывает их?

Кажется, оператор «else» соединяет индекс с новым фреймом данных, act_min_wage?Это то, что происходит?

Зачем нам нужен первый оператор if?Разве второго, который просто присоединится к ним, не будет достаточно?

Большое спасибо за вашу помощь.

act_min_wage = pd.DataFrame()

for name, group in df.groupby("State"):
    if act_min_wage.empty:
        act_min_wage = group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name})
    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))

act_min_wage.head()

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

1) act_min_wage = pd.DataFrame()

создает пустой DataFrame

2) for name, group in df.groupby("State"):

df.groupby ("State") - группировать данные по столбцу "State" , поэтому в цикле имя - уникальные значения столбца «Состояние» группа - все строки из df , имеющие значение столбца "Состояние" , равное текущему имя

3)

 if act_min_wage.empty:
        act_min_wage = group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name})

Если новый фрейм данных act_min_wage пуст (только на первой итерации), поместите туда group и переименуйте столбец "Low.2018" в name (уникальные значения столбца "Состояние" из df )

4) * * 1 044

    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))

Поскольку act_min_wage не является пустым, присоедините его к новым группам , основанным на значениях Year , по умолчанию его оставляют для присоединения.

Таким образом, если оператор использовался для замены пустого фрейма данных на группу на индекс "Год" .

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

Попробуйте этот код на игрушечном примере, чтобы лучше понять все шаги:

import pandas as pd
from IPython.display import display, HTML

df = pd.DataFrame({'State': ['NY', 'NY', 'C', 'C', 'W'], 
                   'Low.2018': [0, 5, 10, 2, 3], 
                   'Year': [2017, 2018, 2017, 2018, 2017]})

act_min_wage = pd.DataFrame()

for name, group in df.groupby("State"):
    print('NEW ITERATION', '\n', 'Group:', '\n', '\t', name)
    display(group)
    print('\n', 'Current state of act_min_wage')
    display(act_min_wage)
    print('\n\n')
    if act_min_wage.empty:
        act_min_wage = group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name})
    else:
        act_min_wage = act_min_wage.join(group.set_index("Year")[["Low.2018"]].rename(columns={"Low.2018":name}))

print('\n', 'Final state of act_min_wage')
display(act_min_wage)
...