我有三栏。桌子看起来像这样:
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
答案 0 :(得分:4)
使用extractall
和crosstab
:
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