Функция, которая будет go через столбец, если число больше 0, вернуть имя столбца, а когда 0, вернуть «Не доступно» - PullRequest
0 голосов
/ 25 апреля 2020

Мне нужна помощь.

Допустим, у меня есть следующий кадр данных под названием venues_df

enter image description here

У меня также есть эта функция: return_most_common_venues

def return_most_common_venues(row, 4):
    # Selects the row values
    row_values = row.iloc[1:]

    # Sorts the selected row values
    row_values_sorted = row_values.sort_values(ascending=False)

    # Returns the column name of the first 4 sorted values 
    return row_values_sorted.index.values[0:4]

Если я применю свою функцию к первой строке:

return_most_common_venues(venues_df.iloc[0, :], 4)

Результатом будет массив (ниже таблицы приведены для иллюстрации):

массив (['Bar', 'Restaurant', 'Park', 'Gym'])

enter image description here

Проблема в том, что я применяю свою функцию ко второму ряду.

return_most_common_venues(venues_df.iloc[1, :], 4)

Я получу массив

(['Park', 'Restaurant', 'Gym', 'SuperMarket'])

enter image description here

Мне нужно, чтобы он возвратил:

массив (['Bar') , 'Restaurant', 'Not Available', 'Not Available'])

Если значение равно нулю, мне нужно вернуть «Not Available» вместо имен столбцов «Gym» и «SuperMarket» '

Как я могу изменить свою функцию так, чтобы она возвращала то, что мне нужно?

Спасибо за ваше помогите!

Эфрен

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020
def return_most_common_venues(df, row, cols):

    # Selects the row values
    row_values = df.loc[row]

    # Sorts the selected row values
    row_values_sorted = row_values[np.argsort(row_values)[-cols:]][::-1]

    # Returns the column name of the first 4 sorted values 
    return [index if value > 0 and value != np.nan else "Not Available" for index, value in zip(row_values_sorted.index, row_values_sorted.values)]

return_most_common_venues(df, row=1, cols=4)

Выход:

['Park', 'Restaurant', 'Not Available', 'Not Available']
0 голосов
/ 25 апреля 2020

Я предлагаю следующее на основе этого вопроса :

import pandas as pd

def return_most_common_venues(row, nb_return_values=4):
    # Selects the row values
    row_values = row.iloc[1:]

    # Sorts the selected row values
    row_values_sorted = row_values.sort_values(ascending=False)

    # Returns the column name of the first 4 sorted values
    output = list(row_values_sorted.index.values[0:nb_return_values])\
                  + ['Not available'] * (nb_return_values - len(row_values_sorted.index))
    return output


df = pd.DataFrame([[7, 4, 1, 5, 9, 3], [5, 0, 0, 8, 0, 0]], 
                  columns=["Restaurant", "Gym", "Supermarket", "Park", "Bar", "Café"],
                  index=[0,1])

return_most_common_venues(df.iloc[1, :], 4)

И результат:

 ['Park', 'Not available', 'Not available', 'Not available']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...