[英]New to Pandas, need to create a df from 2 others (not a merge)
我有一些屬性(a1,a2,a3,a4)的酒店列表:
hotel date a1 a2 a3 a4
H1 201501 business couple pool no kid
H2 201501 NaN couple pool NaN
H3 201502 NaN couple beach kids
我還列出了鏈接到某些屬性的房間類型。
id rooms a1 a2 a3
AAA single business
BBB double couple
BBB double man woman
CCC triple family
CCC triple couple kid
每個選項(單,雙,三)都鏈接到屬性組合(a1,a2,a3,...)。例如,(夫婦)或(男人+女人)將帶來選項“ double”。 因此,酒店H1獲得單人和雙人房。
如何使用這些選項創建新的DataFrame? 每個酒店,例如:
hotel date single double triple
H1 201501 1 1 0
H2 201501 0 1 0
H3 201502 0 1 1
我使用簡單的data_model在簡單的python中輕松完成了所有這些操作,但是我以后想做一些統計,所以我嘗試使用pandas。
感謝您的幫助!
我添加了一個簡單的python(不含熊貓)示例
hotels = [{'hotel':'H1', 'date':201501, 'attributes': ['business', 'couple', 'pool', 'no_kid']},
{'hotel':'H2', 'date':201501, 'attributes': ['NaN', 'couple', 'pool', 'NaN']},
{'hotel':'H3', 'date':201502, 'attributes': ['NaN', 'couple', 'beach', 'kids']}]
rooms = {'single':[['business']],
'double':[['couple'], ['man', 'woman']],
'triple':[['family'], ['couple', 'kids']]}
for hotel in hotels:
hotel['rooms']=[]
att_set = set(hotel['attributes'])
for room, combi in rooms.iteritems():
for tags in combi:
tags_set = set(tags)
if tags_set.issubset(att_set):
hotel['rooms'].append(room)
del(hotel['attributes'])
print hotels
[{'date': 201501,
'hotel': 'H1',
'rooms': ['double', 'single']},
{'date': 201501,
'hotel': 'H2',
'rooms': ['double']},
{'date': 201502,
'hotel': 'H3',
'rooms': ['double', 'triple']}]
如果不合並列表,就無法回答您的問題,而且由於您沒有提供鏈接它們的外鍵,因此無法進行合並。 但是,使用groupby可以很容易地進行計數:
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
from pandas import DataFrame
TESTDATA=StringIO("""hotel date a1 a2 a3 a4
H1 201501 business couple pool no_kid
H2 201501 NaN couple pool NaN
H3 201502 NaN couple beach kids
""")
df = DataFrame.from_csv(TESTDATA, sep=r"[ ]+")
df.reset_index().groupby(['hotel','date','a3']).size().unstack('a3').fillna(0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.