计算 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
使用 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
我有三列。 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
使用 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