lst = [("Adam", "DeltaAir"),
("Bianca", "AlaskanAir"),
("Romeo", "DeltaAir"),
("Danaerys", "DragonAir"),
("Jon", "DragonAir"),
("Walter", "AlaskanAir")]
#Create pandas DataFrame with the names from the list
df = pd.DataFrame([elem[0] for elem in lst], columns=["Name"])
#Iterate over a set (unique values) of character properties (DeltaAir, AlaskanAir, DragonAir)
for elem in set([elem[1] for elem in lst]):
#make a list containing spaces or *'s for every character in the list
#depending on the property we are just iterating over and add that list
# as a column to the DataFrame
df[elem] = ["*" if item[1] == elem else " " for item in lst]
РЕДАКТИРОВАТЬ на ваш комментарий:
Вы можете использовать groupby и агрегат для группировки значений по имени (если это не то, что вы имели в виду, уточните, пожалуйста).
df.reindex(sorted(df.columns))
df2 = pd.DataFrame(sorted(list(df["Name"].unique())), columns = ["Name"])
for elem in set([elem[1] for elem in lst]):
df2[elem] = list(df.groupby(['Name'])[elem].agg(lambda x: "*" if "*" in x.values else " "))
Добавление дополнительной информации
Спасибо, Флориан. Я имею в виду, если есть дубликаты имен, как показано ниже, он должен соответствующим образом заполнить соответствующую строку авиакомпании. Например: Адам и Ромео, появляющиеся дважды, будут похожи вместо двух отдельных строк для одного и того же имени.
[("Adam", "DeltaAir"),
("Bianca", "AlaskanAir"),
("Romeo", "DeltaAir"),
("Danaerys", "DragonAir"),
("Jon", "DragonAir"),
("Walter", "AlaskanAir"),
("Adam", "AlaskanAir"),
("Romeo", "DragonAir")]
------------------------------------------
Name | AlaskanAir | DeltaAir | DragonAir
------------------------------------------
Adam * *
Bianca *
Romeo * *
Danaerys *
Jon *
Walter *
------------------------------------------