我有一個城市名稱的字典,每個都有一個空串列作為值。我正在嘗試
df.iterrows()
將相應的名稱附加到每個字典鍵(城市):
for index, row in df.iterrows():
dict[row['city']].append(row['fullname'])
有人能解釋一下為什么上面的代碼將所有可能的“全名”值附加到每個字典的鍵上,而不是將它們附加到各自的城市鍵上嗎?
即而不是得到結果
{"City1":["Name1","Name2"],"City2":["Name3","Name4"]}
我越來越
{"City1":["Name1","Name2","Name3","Name4"],"City2":["Name1","Name2","Name3","Name4"]}
編輯:提供資料框示例:
d = {'fullname': ['Jason', 'Katty', 'Molly', 'Nicky'],
'city': ['Arizona', 'Arizona', 'California', 'California']}
df = pd.DataFrame(data=d)
編輯2:我很確定我的問題在于我的字典,因為我是通過以下方式創建的:
cities = []
for i in df['city']:
cities.append(i)
dict = dict.fromkeys(set(cities), [])
當我呼叫 dict 時,我得到正確的輸出:
{"Arizona":[],"California":[]}
但是,如果我指定一個鍵dict['Arizona'],我會得到這個:
{"index":[],"columns":[],"data":[]}
uj5u.com熱心網友回復:
我很驚訝它完全有效,因為row它是一個系列。
這種替代方法怎么樣:
for city in your_dict.keys():
your_dict[city] = list(df["fullname"][df["city"] == city])
除非絕對必要,否則您應該始終避免遍歷資料框。
uj5u.com熱心網友回復:
問題確實是.fromkeys- 默認值被評估一次 - 所以所有的鍵都“指向”同一個串列。
>>> dict.fromkeys(['one', 'two'], [])
{'one': [], 'two': []}
>>> d = dict.fromkeys(['one', 'two'], [])
>>> d['one'].append('three')
>>> d
{'one': ['three'], 'two': ['three']}
您需要理解才能為每個鍵創建一個不同的串列。
>>> d = { k: [] for k in ['one', 'two'] }
>>> d
{'one': [], 'two': []}
>>> d['one'].append('three')
>>> d
{'one': ['three'], 'two': []}
您還使用您的代碼手動實作 groupby :
>>> df.groupby('city')['fullname'].agg(list)
city
Arizona [Jason, Katty]
California [Molly, Nicky]
Name: fullname, dtype: object
如果你想要一個字典:
>>> df.groupby('city')['fullname'].agg(list).to_dict()
{'Arizona': ['Jason', 'Katty'], 'California': ['Molly', 'Nicky']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422939.html
標籤:
上一篇:熊貓資料框與自身有條件的內部連接
