繁体   English   中英

Python Pandas 计算特定值的出现次数

[英]Python Pandas Counting the Occurrences of a Specific value

我试图找出某个值在一列中出现的次数。

我用data = pd.DataFrame.from_csv('data/DataSet2.csv')制作了 dataframe

现在我想知道某些东西在列中出现的次数。 这是怎么做到的?

我以为是下面,我在教育栏目中查找并计算时间的地方? 发生。

下面的代码显示我正在尝试查找9th次出现的次数,错误是我在运行代码时得到的

代码

missing2 = df.education.value_counts()['9th']
print(missing2)

错误

KeyError: '9th'

您可以根据您的条件创建数据subset ,然后使用shapelen

print df
  col1 education
0    a       9th
1    b       9th
2    c       8th

print df.education == '9th'
0     True
1     True
2    False
Name: education, dtype: bool

print df[df.education == '9th']
  col1 education
0    a       9th
1    b       9th

print df[df.education == '9th'].shape[0]
2
print len(df[df['education'] == '9th'])
2

性能很有趣,最快的解决方案是比较 numpy array 和sum

图形

代码

import perfplot, string
np.random.seed(123)


def shape(df):
    return df[df.education == 'a'].shape[0]

def len_df(df):
    return len(df[df['education'] == 'a'])

def query_count(df):
    return df.query('education == "a"').education.count()

def sum_mask(df):
    return (df.education == 'a').sum()

def sum_mask_numpy(df):
    return (df.education.values == 'a').sum()

def make_df(n):
    L = list(string.ascii_letters)
    df = pd.DataFrame(np.random.choice(L, size=n), columns=['education'])
    return df

perfplot.show(
    setup=make_df,
    kernels=[shape, len_df, query_count, sum_mask, sum_mask_numpy],
    n_range=[2**k for k in range(2, 25)],
    logx=True,
    logy=True,
    equality_check=False, 
    xlabel='len(df)')

使用countsum的几种方法

In [338]: df
Out[338]:
  col1 education
0    a       9th
1    b       9th
2    c       8th

In [335]: df.loc[df.education == '9th', 'education'].count()
Out[335]: 2

In [336]: (df.education == '9th').sum()
Out[336]: 2

In [337]: df.query('education == "9th"').education.count()
Out[337]: 2

一种计算'?'出现的优雅方法或任何列中的任何符号,都是使用数据框对象的内置函数isin

假设我们已将“汽车”数据集加载到df对象中。 我们不知道哪些列包含缺失值( '?'符号),所以让我们这样做:

df.isin(['?']).sum(axis=0)

DataFrame.isin(values)官方文档说:

它返回布尔数据帧,显示数据帧中的每个元素是否包含在值中

请注意, isin接受一个可迭代对象作为输入,因此我们需要将包含目标符号的列表传递给该函数。 df.isin(['?'])将返回一个布尔数据框,如下所示。

    symboling   normalized-losses   make    fuel-type   aspiration-ratio ...
0   False       True                False   False       False
1   False       True                False   False       False
2   False       True                False   False       False
3   False       False               False   False       False
4   False       False               False   False       False
5   False       True                False   False       False
...

为了计算每列中目标符号的出现次数,让我们通过指示axis=0对上述数据帧的所有行sum 最终(截断的)结果显示了我们的期望:

symboling             0
normalized-losses    41
...
bore                  4
stroke                4
compression-ratio     0
horsepower            2
peak-rpm              2
city-mpg              0
highway-mpg           0
price                 4

尝试这个:

(df[education]=='9th').sum()

简单但效率不高:

list(df.education).count('9th')

要查找列的特定值,您可以使用下面的代码

无论偏好如何,您都可以使用您喜欢的任何方法

df.col_name.value_counts().Value_you_are_looking_for

以泰坦尼克号数据集为例

df.Sex.value_counts().male

这给出了船上所有男性的计数虽然如果你想计算一个数字数据那么你不能使用上面的方法,因为 value_counts() 只用于系列类型的数据因此失败所以你可以使用第二种方法示例

第二种方法是

#this is an example method of counting on a data frame
df[(df['Survived']==1)&(df['Sex']=='male')].counts()

这不像 value_counts() 那样有效,但如果您想计算数据框的值肯定会有所帮助希望这有帮助

编辑——如果你想找一些中间有空格的东西

你可以使用

df.country.count('united states')我相信这应该可以解决问题

计算 Pandas 数据框中列中出现次数(唯一值)的简单示例:

import pandas as pd

# URL to .csv file 
data_url = 'https://yoursite.com/Arrests.csv'
# Reading the data 
df = pd.read_csv(data_url, index_col=0)
# pandas count distinct values in column 
df['education'].value_counts()

输出:

Education        47516 
9th              41164 
8th              25510 
7th              25198 
6th              25047                       
...  
3rd                 2 
2nd                 2 
1st                 2 
Name: name, Length: 190, dtype: int64

我认为这可能是一个更简单的解决方案。 假设您有以下数据框。

DATE    LANG       POSTS

2008-07-01 c# 3 2008-08-01 assembly 8 2008-08-01 javascript 2 2008-08-01 c 85 2008-08-01 python 11 2008-07-01 c# 3 2008-08-01 assembly 8 2008 -08-01 javascript 62 2008-08-01 c 85 2008-08-01 python 14

你可以像这样找到 LANG 项目总和的出现

df.groupby('LANG').sum()

您将获得每种语言的总和

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM