Как вставить строку на основе оператора if внутри Dataframe - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть датафрейм, 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 голос
/ 14 апреля 2020

Я думаю, что это ваш необходимый золь

import pandas as pd
df=pd.DataFrame({'Id':[130,130,130,102,120,120,99,75,75],'DrinkType': 
['Beer','Wine','Beer','Beer','Wine','Beer','Wine','Beer','Beer'],'Drink': 
                            ['Fosters','Rose','Budweiser','Fosters','PinotGrigot','Budweiser','Coke','Carling','Fosters']})

diff=df['Id'].unique()
print(diff)

all_cate={'Beer','Wine'}

for i in diff:
    inte=all_cate.intersection(set(df.loc[df['Id']==i,'DrinkType'].unique()))
    for j in all_cate:
        if(j not in inte):
            print((i,j,'NotStated'))
            df=pd.concat([df,pd.DataFrame({'Id':[i],'DrinkType':[j],'Drink': 
                                                                     ['NotStated']})])


df=df.reset_index(drop=True)

enter image description here

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