假设我有以下数据帧:
name tags
0 abc (1990) AB|A|BC
1 def (2000) BC|AB
2 yz (1990) A|AB
tags
列中的值是管道分隔的。此外,列name
中的值的格式类似于description (year)
。我想计算每年的标签数量,得到一个Series
对象,如下所示:
year
1990 A 2
AB 2
BC 1
2000 AB 1
BC 1
或其等价物作为DataFrame
:
year tags count
0 1990 A 2
1 1990 AB 2
2 1990 BC 1
3 2000 AB 1
4 2000 BC 1
我有一个解决方案,但是因为它涉及到定义一个自定义函数来传递给apply
方法,我想知道是否存在更紧凑或有效的解决方案
以下是我目前的解决方案:
years = df['name'].str.slice(start=-5, stop=-1).rename('year')
new_df = df['tags'].str.split('|', expand=True).join(years)
def count_tags(g):
return g.drop(columns=['year']).stack().value_counts()
new_df.groupby('year').apply(count_tags)
它给出:
year
1990 A 2
AB 2
BC 1
2000 AB 1
BC 1
dtype: int64
p.S.对我来说,year
在结果中存储为字符串还是整数并不重要
用途:
解释:
year
使用^{Series
用MultiIndex
重塑另一种解决方案:
解释:
size
相关问题 更多 >
编程相关推荐