python - 如何获取 pandas 数据框对象值的模式?

标签 python python-3.x pandas dataframe counter

我有一个 pandas.DataFrame包含许多列。我只对 type = 'object' 的那些列('names')中的一个感兴趣。关于本专栏,我想回答三个问题:

  1. 什么值最常出现,不包括 nan 值?

  2. 有多少值符合该标准(答案 #1 中的值计数)?

  3. 这些值多久出现一次?

我从一个大数据框 (df) 开始。我感兴趣的专栏称为“名称”。首先,我使用 collection.Counter 获取“名称”列中每个唯一值的出现次数:

In [52]: cntr = collections.Counter([r for i, r in df['names'].dropna().iteritems()])
Out[52]: Counter({'Erk': 118,
    'James': 120,
    'John': 126,
    'Michael': 129,
    'Phil': 117,
    'Ryan': 126})

然后我将计数器转换回数据框:

In [53]: df1 = pd.DataFrame.from_dict(cntr, orient='index').reset_index()
In [54]: df1 = df1.rename(columns={'index':'names', 0:'cnt'})

这给了我一个 pandas 数据框,其中包含:

In [55]: print (type(df1), df1)
Out[55]: <class 'pandas.core.frame.DataFrame'>
       names    cnt
    0      Erk  118
    1    James  120
    2     Phil  117
    3     John  126
    4  Michael  122
    5     Ryan  126

下一部分是我需要一些帮助的地方。在这个例子中我想要的输出是:

答案 #1 = [John, Ryan]

答案 #2 = 2

答案 #3 = 126

我不相信使用 Counter 是最好的选择,所以我对保留在数据帧内而不在数据帧之间反弹以反击数据帧的选项持开放态度。

最佳答案

您可以直接从 Counter 获取该信息,例如:

代码:

from collections import Counter

data = Counter({'Erk': 118, 'James': 120, 'John': 126,
                'Michael': 122, 'Phil': 117, 'Ryan': 126})

by_count = {}
for k, v in data.items():
     by_count.setdefault(v, []).append(k)
max_value = max(by_count.keys())
print(by_count[max_value], len(by_count[max_value]), max_value)

结果:

['John', 'Ryan'] 2 126

关于python - 如何获取 pandas 数据框对象值的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251562/

相关文章:

python - 子进程登录到远程主机而不是在 python 中出现

python-3.x - 通过 openpyxl 使用公式从 Excel 单元格获取值

python - 如何找出每个唯一键的趋势。数据框

python - pd.Series.dt.weekday 与 pd.Series.dt.dayofweek 之间有区别吗?

python - 使用 Pandas Python 计算白天站点中断持续时间

python - 偏好值的变化不影响亲和性传播聚类的结果

python - 将 FASTA 文件字符串转换为列表时的内存限制

python - 如何使用pyodbc连接到vertica

python - 如何实时更新tkinter标签文本

python - 如何使用 tkinter 将按钮移出他的 parent ?