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