在Python中,如何计算数据帧中字符串的出现次数?

在Python中,如何计算数据帧中字符串的出现次数?,python,dataframe,Python,Dataframe,我试图计算数据帧列中的船只数量。在这种情况下,我试图计算77小时的数量。我可以对单个元素执行此操作,但对整个专栏的操作似乎不起作用 例如,这适用于我的数据框中的单个元素 df = pd.DataFrame({'Route':['Callais','Dover','Portsmouth'],'shipCode':[['77H','77G'],['77G'],['77H','77H']]}) df['shipCode'][2].count('77H') 但是当我尝试在每一行上使用 df['ship

我试图计算数据帧列中的船只数量。在这种情况下,我试图计算77小时的数量。我可以对单个元素执行此操作,但对整个专栏的操作似乎不起作用

例如,这适用于我的数据框中的单个元素

df = pd.DataFrame({'Route':['Callais','Dover','Portsmouth'],'shipCode':[['77H','77G'],['77G'],['77H','77H']]})
df['shipCode'][2].count('77H')
但是当我尝试在每一行上使用

df['shipCode'].count('77H')
df['shipCode'].str.count('77H')
这两次尝试都失败了,如果您能提供有关如何编写此代码的任何帮助,我们将不胜感激


谢谢

如果你做了这样的事怎么办

假设你最初的字典

import pandas as pd
from collections import Counter
df = pd.DataFrame(df) #where df is the dictionary defined in OP
您可以为每行列表中的所有元素生成一个
计数器,如下所示:

df['counts'] = df['shipCode'].apply(lambda x: Counter(x))
 df['counts'] = df['shipCode'].apply(lambda x: Counter(x)['77H'])
输出:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}
        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2
[1, 0, 2]
或者,如果您特别想要一个,即
'77H'
,您可以这样做:

df['counts'] = df['shipCode'].apply(lambda x: Counter(x))
 df['counts'] = df['shipCode'].apply(lambda x: Counter(x)['77H'])
输出:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}
        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2
[1, 0, 2]
甚至可以使用第一种方法(每行的完整计数器):

输出:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}
        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2
[1, 0, 2]

如果你做了这样的事怎么办

假设你最初的字典

import pandas as pd
from collections import Counter
df = pd.DataFrame(df) #where df is the dictionary defined in OP
您可以为每行列表中的所有元素生成一个
计数器,如下所示:

df['counts'] = df['shipCode'].apply(lambda x: Counter(x))
 df['counts'] = df['shipCode'].apply(lambda x: Counter(x)['77H'])
输出:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}
        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2
[1, 0, 2]
或者,如果您特别想要一个,即
'77H'
,您可以这样做:

df['counts'] = df['shipCode'].apply(lambda x: Counter(x))
 df['counts'] = df['shipCode'].apply(lambda x: Counter(x)['77H'])
输出:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}
        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2
[1, 0, 2]
甚至可以使用第一种方法(每行的完整计数器):

输出:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}
        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2
[1, 0, 2]

数据框有一个shipcode列,其中包含一个值列表

首先显示True或False值,以标识shipcode列中包含字符串“77H”的行

> df['shipcode'].map(lambda val: val.count('77H')>0)
现在,根据上一步中获得的真/假值过滤数据帧

> df[df['shipcode'].map(lambda val: val.count('77H')>0)]
最后,使用python
len
方法获取数据帧中所有值的计数,其中shipcode列表包含与“77H”匹配的值

> len(df[df['shipcode'].map(lambda val: val.count('77H')>0)])
另一种容易记住分析内容的方法是在同一数据帧中创建一列来存储真/假值。然后根据真/假值进行过滤。实际上和上面一样,但在我看来更漂亮一点

> df['filter_column'] = df['shipcode'].map(lambda val: val.count('77H')>0)
> len(df[df['filter_column']])

祝你好运,享受使用Python和Pandas处理数据的乐趣

数据框有一个shipcode列,其中包含一个值列表

首先显示True或False值,以标识shipcode列中包含字符串“77H”的行

> df['shipcode'].map(lambda val: val.count('77H')>0)
现在,根据上一步中获得的真/假值过滤数据帧

> df[df['shipcode'].map(lambda val: val.count('77H')>0)]
最后,使用python
len
方法获取数据帧中所有值的计数,其中shipcode列表包含与“77H”匹配的值

> len(df[df['shipcode'].map(lambda val: val.count('77H')>0)])
另一种容易记住分析内容的方法是在同一数据帧中创建一列来存储真/假值。然后根据真/假值进行过滤。实际上和上面一样,但在我看来更漂亮一点

> df['filter_column'] = df['shipcode'].map(lambda val: val.count('77H')>0)
> len(df[df['filter_column']])

祝你好运,享受使用Python和Pandas处理数据的乐趣

用这些值过滤数据帧,并对生成的数据帧
df
进行值\u计数。在本例中,is
dict
不是
dataframe
这是否回答了您的问题?或者如果你真的有一个数据帧;在这种情况下,您不需要。使用这些值过滤数据帧,并对生成的数据帧进行值_计数。在本例中,这是否回答了您的问题?或者如果你真的有一个数据帧;在这种情况下,您不需要。非常感谢!正是我一直在找的汉克斯!正是我想要的哦,天哪!我没有注意到您要求提供事件总数。我以为你在寻找shipcode列中包含77H值的行数。哦,天哪!我没有注意到您要求提供事件总数。我以为您正在查找shipcode列中包含77H值的行数。