python - Pandas Dataframe 中的频率词典

标签 python dictionary pandas dataframe frequency

我正在尝试使用列名作为键从 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}

最佳答案

您可以使用value_counts为每一列分配一个字典以生成 Series 的字典:

In [19]:

temp={}
for col in df:
    temp[col] = df[col].value_counts()
temp
Out[19]:
{'Animal': Dog     2
 Cat     2
 Bird    1
 dtype: int64, 'Name': Foo    3
 Baz    1
 Bar    1
 dtype: int64, 'Legs': 4    4
 2    1
 dtype: int64, 'Color': Black    2
 White    2
 Brown    1
 dtype: int64}
In [21]:

temp['Animal']
Out[21]:
Dog     2
Cat     2
Bird    1
dtype: int64

如果您想访问“Dog”计数,则 temp['Animal']['Dog'] 将输出 2

关于python - Pandas Dataframe 中的频率词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146313/

相关文章:

pandas - 无法从 panda 系列中删除 NaN

python - 如何仅在使用 python 更新后才从输入文件中读取文本

python - 以编程方式编辑谷歌文档

python - 如果嵌套字典中存在值,则查找键

java - 在java中创建一个字符串列表,其中每个字符串都是元组列表(作为值)的键

java - 如何从java中的Dictionary类一次检索一条记录

python - 获取所有 Facebook 页面问题

python - 用 C 语言运行 python 程序并获取结果

python - 使用 Function 优化设置 Pandas 列

Python:如何将 ggplot 与简单的 2 列数组一起使用?