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

时间:2018-10-16 19:47:36

标签: python pandas dataframe multiple-columns querying

我有三栏。桌子看起来像这样:

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

2 个答案:

答案 0 :(得分:4)

使用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

答案 1 :(得分:2)

由于您的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