【发布时间】:2014-09-28 13:23:24
【问题描述】:
我正在尝试从 Pandas 数据框中获取键值对的频率计数,使用列名作为键。
虽然有几个相关的问题,但没有一个真正帮助我实现了我想要的,所以我写了一个嵌套的for循环来实现我的目标:
#first get all key value pairs
d = {}
for var in list(df.columns.values):
d[var] = df[var].unique().tolist()
#then count
d_num = {}
for k,l in d.iteritems():
for v in l:
d_num[(k+'_'+str(v))] = len(df[df[k]==v])
freqs = Counter(d_num.values()).most_common()
显然,这很慢,但我想不出使用矢量化方法的方法。有什么想法吗?
编辑: 这是一个示例输入:
Name Animal Legs Color
0 Foo Dog 4 Brown
1 Bar Cat 4 White
2 Baz Cat 4 Black
3 Foo Bird 2 Black
4 Foo Dog 4 White
输出(不一定是字典,也不一定是那种键):
out = {Name_Foo: 3, Name_Bar:1, Name_Baz:1, Animal_Dog:2, Animal_Cat:2, Animal_Bird:1, Legs_2:1, Legs_4:4, Color_Brown:1, Color_White:2, Color_Black:2}
【问题讨论】:
-
你能显示输入和预期输出吗?我觉得您正在寻找
pd.value_counts(Series),但很难完全按照您的要求进行操作 -
value_counts()有什么问题? -
刚刚添加了示例输入/输出.... value_counts() 可以处理多列吗?
-
value_counts在一个系列上运行,你不能在 df 上调用它,看我的回答
标签: python dictionary pandas dataframe frequency