0
我有一個數據集是類似下面的設置後:找到獨特的列元素計數使用GROUPBY與熊貓
rows = [
('us', 0, 'ca', None, 94107, -100),
('ca', 1, None, 'bc', 94107, -100),
('us', 0, 'ca', None, 94106, 0),
('us', 0, 'ca', None, 94107, 0),
('ca', 1, None, 'bc', 94107, 0),
('ca', 1, None, 'bc', 94107, 0),
('us', 0, 'ca', None, 94107, 100),
('us', 0, 'ca', None, 94107, 100)
]
我想GROUP BY:(country, state/provence, zip)
然後找到Option
列的罪名,分組完成後,最後轉換爲字典。
理想我想的字典格式化爲這樣的:
{
('us', 'ca', 94107): {100: 2, -100: 1, 0: 1},
('us', 'ca', 94106): {0: 1},
('ca', 'bc', 94107): {-100: 1, 0: 2}
}
我有下面的代碼至今:
# build the data frame
df = pd.DataFrame(rows, columns=['Country', 'LocFilter', 'State', 'Provence', 'Zip', 'Option'])
# consolidate "State" and "Provence" into "MainProvence" based on "LocFilter"
df['MainProvence'] = df.apply(lambda row: (row['Provence'] if row['LocFilter'] == 1 else row['State']), axis=1)
# group by and find distribution
distribution = df.groupby(by=['Country', 'MainProvence','Zip', 'Option'])['Option'].count()
# print the result
print distribution
這給了我以下 - 這看起來很不錯:
Country MainProvence Zip Option
ca bc 94107 -100 1
0 2
us ca 94106 0 1
94107 -100 1
0 1
100 2
Name: Option, dtype: int64
但是,當我將其轉換爲字典時:
print distribution.to_dict()
我得到這個:
{
('us', 'ca', 94107, 100): 2,
('us', 'ca', 94106, 0): 1,
('us', 'ca', 94107, -100): 1,
('ca', 'bc', 94107, 0): 2,
('ca', 'bc', 94107, -100): 1,
('us', 'ca', 94107, 0): 1
}
基於我怎麼形成的GROUPBY這是可以理解的。我明顯可以操縱python中的返回字典來獲取我想要的格式 - 但是有什麼方法可以使用pandas來獲取這種格式嗎?
工作很好!我還在學習熊貓,一定錯過了堆棧/堆棧。關於fillna的提示也很棒。並感謝包括版本說明,我不得不碰撞我的熊貓版本,然後它的工作很好。 – tknickman
很高興爲您服務!即使在我的早期,我錯過了很多功能。我建議閱讀Pandas的文檔。它可能會變得無聊,所以趕快行動吧。 – Kartik