Вставить строки в DataFrame, основываясь на определенных условиях - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть датафрейм 'df', и я хочу вставить строки в зависимости от условий внутри самого df. Каждое значение «ID» должно иметь соответствующую запись для обоих типов напитков (пиво и вино). Я хотел бы сказать, что если у какой-либо записи идентификатора нет типа пива, например, добавьте строку с DrinkType, равным Beer, и Drink, равным 'Not Stated'. Точно так же, если Beer было указано для значения ID, но не для Wine, добавьте строку с Wine в поле «Тип напитка» и «Напиток», равное «Не указано». Я бы хотел, чтобы df выглядел как df1.

df:    

ID    DrinkType    Drink

130   Beer         Fosters
130   Wine         Rose
130   Beer         Budweiser 
102   Beer         Fosters
120   Wine         Pinot Grigot
120   Beer         Budweiser 
99    Wine         Coke
75    Beer         Carling
75    Beer         Fosters


df1:    

ID    DrinkType    Drink

130   Beer         Fosters
130   Wine         Rose
130   Beer         Budweiser 
102   Beer         Fosters
102   Wine         Not Stated
120   Wine         Pinot Grigot
120   Beer         Budweiser 
99    Wine         Coke   
99    Beer         Not Stated
75    Beer         Carling
75    Beer         Fosters
75    Wine         Not Stated

1 Ответ

1 голос
/ 11 апреля 2020

Функция для вставки строки в фрейм данных с определенным индексом

def Insert_row_(row_number, df, row_value): 
     #Slice the upper half of the dataframe 
     df1 = df[0:row_number] 
     # Store the result of lower half of the dataframe 
     df2 = df[row_number:] 

     # Inser the row in the upper half dataframe 
     df1.loc[row_number]=row_value 

     # Concat the two dataframes 
     df_result = pd.concat([df1, df2]) 

     # Reassign the index labels 
     df_result.index = [*range(df_result.shape[0])] 

     # Return the updated dataframe 
     return df_result 

Давайте создадим строку, которую мы хотим вставить

index = 2
item_insert = ['Beer','NotStated'] 

if row_number > df.index.max()+1: 
    df[index]=row_value 
else: 
    # Let's call the function and insert the row 
    # at the second position 
    df = Insert_row_(2, df, row_value) 


print(df) 

вставить любую строку наконец

найти максимальный индекс текущего фрейма данных

df[s]=rowvalue or we can use pd.concat(df,df1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...