我有一个餐厅的数据框,其中一列有相应的菜系。
问题是,在同一列中有多个菜系的餐厅[最多8家]
假设是这样的:
RestaurantName City Restaurant ID Cuisines
Restaurant A Milan 31333 French, Spanish, Italian
Restaurant B Shanghai 63551 Pizza, Burgers
Restaurant C Dubai 7991 Burgers, Ice Cream
下面是一个可复制的代码示例:
rst= pd.DataFrame({'RestaurantName': ['Rest A', 'Rest B', 'Rest C'],
'City': ['Milan', 'Shanghai', 'Dubai'],
'RestaurantID': [31333,63551,7991],
'Cuisines':['French, Spanish, Italian','Pizza, Burgers','Burgers, Ice Cream']})
我使用stringsplit将它们扩展为8个不同的列,并将其添加到dataframe中
csnsplit=rst.Cuisines.str.split(", ",expand=True)
rst["Cuisine1"]=csnsplit.loc[:,0]
rst["Cuisine2"]=csnsplit.loc[:,1]
rst["Cuisine3"]=csnsplit.loc[:,2]
rst["Cuisine4"]=csnsplit.loc[:,3]
rst["Cuisine5"]=csnsplit.loc[:,4]
rst["Cuisine6"]=csnsplit.loc[:,5]
rst["Cuisine7"]=csnsplit.loc[:,6]
rst["Cuisine8"]=csnsplit.loc[:,7]
这让我想到: https://i.stack.imgur.com/AUSDY.png
现在我不知道如何计算各个菜系的数量,因为它们跨越了多达8个不同的栏目,比如说,如果我想看看各个城市的顶级菜系
我还试着为所有的菜系制作虚拟栏目,从菜系1到菜系8。这让我有了重复的菜系,比如Cusine1_面包房、Cusine2_面包房等等。我可以假设合并为一个,只保留一个计数为“1”的,但不知道怎么做
dummies=pd.get_dummies(data=rst,columns=["Cuisine1","Cuisine2","Cuisine3","Cuisine4","Cuisine5","Cuisine6","Cuisine7","Cuisine8"])
print(dummies.columns.tolist())
这就给我留下了所有这些专栏: https://i.stack.imgur.com/84spI.png
我尝试的第三件事是从所有8列中获取唯一的值,我有一个每种烹饪类型的重复列表。我可能可以将所有这些列添加到数据框中,但不知道如何根据列名为每一行填充计数
AllCsn=np.concatenate((rst.Cuisine1.unique(),
rst.Cuisine2.unique(),
rst.Cuisine3.unique(),
rst.Cuisine4.unique(),
rst.Cuisine5.unique(),
rst.Cuisine6.unique(),
rst.Cuisine7.unique(),
rst.Cuisine8.unique()
))
AllCsn=np.unique(AllCsn.astype(str))
AllCsn
这让我想到:
https://i.stack.imgur.com/O9OpW.png
我确实希望稍后创建一个模型,在该模型中,我可能会为每种菜肴创建一个列,并使用上面的“唯一”代码来获取所有列,但接下来我需要找出如何根据列标题进行计数
我是新来的,所以请容忍我,让我知道如果我需要提供更多的信息
听起来你在寻找^{} 而没有展开,然后^{} :
创建一个框架,如:
然后听起来像^{} :
或^{}
通过^{} 每个城市的最大值计数:
max_counts
:相关问题 更多 >
编程相关推荐