计算 table 给定列中的所有字符串值并根据第三列对其进行分组

counting all string values in given column of a table and grouping it based on third column

我有三列。 table 看起来像这样:

ID.   names     tag
1.     john.     1
2.     sam       0
3.    sam,robin. 1
4.     robin.    1

Id: 类型整数 名称:类型字符串 标签:键入整数(仅 0,1)

我想要的是找出每个名字重复了多少次,以0和1分组。这在python中完成。

答案必须像

               0                 1
John           23                12
Robin          32                10
sam            9                 30

由于您的 names 列的性质,在获得值计数之前需要进行一些重新处理。对于您的示例数据框,这可能类似于:

my_counts = (df.set_index(['ID.', 'tag'])
             # Get rid of periods and split on commas
             .names.str.strip('.').str.split(',')
             .apply(pd.Series)
             .stack()
             .reset_index([0, 1])
             # rename column 0 for consistency, easier reading
             .rename(columns={0: 'names'})
             # Get value counts of names per tag:
             .groupby('tag')['names']
             .value_counts()
             .unstack('tag', fill_value=0))

>>> my_counts
tag    0  1
names      
john   0  1
robin  0  2
sam    1  1

使用 extractallcrosstab:

s = df.names.str.extractall(r'(\w+)').reset_index(1, drop=True).join(df.tag)

pd.crosstab(s[0], s['tag'])

tag    0  1
0
john   0  1
robin  0  2
sam    1  1