计算列表中每个项目在 Pandas 数据框列中出现的次数,用逗号分隔值

use*_*559 5 csv grouping dataframe pandas

我有一个清单:

citylist = ['New York', 'San Francisco', 'Los Angeles', 'Chicago', 'Miami']
Run Code Online (Sandbox Code Playgroud)

和具有这些值的熊猫数据框 df1

first   last            city                                email
John    Travis          New York                            a@email.com
Jim     Perterson       San Franciso, Los Angeles           b@email.com
Nancy   Travis          Chicago                             b1@email.com
Jake    Templeton       Los Angeles                         b3@email.com
John    Myers           New York                            b4@email.com
Peter   Johnson         San Franciso, Chicago               b5@email.com
Aby     Peters          Los Angeles                         b6@email.com
Amy     Thomas          San Franciso                        b7@email.com
Jessica Thompson        Los Angeles, Chicago, New York      b8@email.com
Run Code Online (Sandbox Code Playgroud)

我想计算城市列表中每个城市在数据框列“城市”中出现的次数:

New York        3       
San Francisco   3
Los Angeles     4
Chicago         3
Miami           0
Run Code Online (Sandbox Code Playgroud)

目前我有

dftest = df1.groupby(by='city', as_index=False).agg({'id': pd.Series.nunique})
Run Code Online (Sandbox Code Playgroud)

最后将“洛杉矶、芝加哥、纽约”计为 1 个唯一值

有没有办法获得我上面显示的计数?谢谢

Sco*_*ton 4

尝试这个:

先修复数据:

df1['city'] = df1['city'].str.replace('Franciso', 'Francisco')
Run Code Online (Sandbox Code Playgroud)

用这个:

(df1['city'].str.split(', ')
            .explode()
            .value_counts(sort=False)
            .reindex(citylist, fill_value=0))
Run Code Online (Sandbox Code Playgroud)

输出:

New York         3
San Francisco    3
Los Angeles      4
Chicago          3
Miami            0
Name: city, dtype: int64
Run Code Online (Sandbox Code Playgroud)