[英]Creating a new column in Dataframe based on multiple lists
我正在嘗試根據數據中名為“場地類別”的另一列中的值是否出現在特定列表中,在 dataframe 中創建一個新列“BroadCategory”。 我有 5 個列表用於填寫新列中的值
例如:
df['BroadCategory'] = np.where(df['VenueCategory'].isin(Bar),'Bar','Other')
df['BroadCategory'] = np.where(df['VenueCategory'].isin(Museum_ArtGallery),'Museum/Art Gallery','Other')
df['BroadCategory'] = np.where(df['VenueCategory'].isin(Public_Transport),'Public Transport','Other')
df['BroadCategory'] = np.where(df['VenueCategory'].isin(Restaurant_FoodVenue),'Restaurant/Food Venue','Other')
我最終希望出現在列表 Bar 中的 VenueCategory 列中的值被標記為“Bar”,而出現在列表 Museum_ArtGallery 中的值被標記為“Museum_ArtGallery”,等等。我上面的代碼沒有做到這一點。
我嘗試這樣做是為了保留我之前填寫的值,但它仍然會覆蓋我根據之前的條件填寫的值:
df['BroadCategory'] = np.where(df[df.VenueCategory!='Other'].isin(Entertainment_Venue),'Entertainment Venue','Other')
如何根據 VenueCategory 列中的值是否出現在指定列表 Bar、Restaurant、Public_Transport、Museum_ArtGallery 等中,用特定值填充 BoardCategory 列?
支持你的數據是這樣的
df=pd.DataFrame({'VenueCategory':['drink','wine','MOMA','MTA','sushi','Hudson']})
Bar=['drink','wine','alcohol']
Museum_ArtGallery=['MOMA','MCM']
Public_Transport=['MTA','MBTA']
Restaurant_FoodVenue=['sushi','chicken']
准備字典:
from collections import defaultdict
d=defaultdict(lambda:'other')
d.update({x:'Bar' for x in Bar})
d.update({x:'Museum_ArtGallery' for x in Museum_ArtGallery})
d.update({x:'Public_Transport' for x in Public_Transport})
d.update({x:'Restaurant_FoodVenue' for x in Restaurant_FoodVenue})
建立新列並打印結果:
df['BroadCategory']=df['VenueCategory'].apply(lambda x:d[x])
df
venue_list = [['Bar', Bar],
['Museum_ArtGallery',Museum_ArtGallery]
#etc
]
venue_lookup = pd.concat([
pd.DataFrame({
'BroadCategory':venue[0],
'VenueCategory':venue[1]}) for venue in venue_list]
)
pd.merge(df, venue_lookup, how='left', on = 'VenueCategory')
您的解決方案已經很接近了。 只是為了不覆蓋以前的值,您應該獲取行的子集,並且只在子集上設置新值。
為此,您可以首先將新列BroadCategory
初始化為“其他”。 然后通過使用.isin()
function 為新列下標 Boolean 掩碼來設置每個類別的行子集,就像您現在使用的一樣。 代碼如下:
df['BroadCategory'] = 'Other'
df['BroadCategory'][df['VenueCategory'].isin(Bar)] = 'Bar'
df['BroadCategory'][df['VenueCategory'].isin(Museum_ArtGallery)] = 'Museum/Art Gallery'
df['BroadCategory'][df['VenueCategory'].isin(Public_Transport)] = 'Public Transport'
df['BroadCategory'][df['VenueCategory'].isin(Restaurant_FoodVenue)] = 'Restaurant/Food Venue'
df['BroadCategory'][df['VenueCategory'].isin(Entertainment_Venue)] = 'Entertainment Venue'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.