[英]pandas - Counting occurrences of a value in a DataFrame per each unique value in another column
Supposing that I have a DataFrame along the lines of: 假设我有一个DataFrame:
term score
0 this 0
1 that 1
2 the other 3
3 something 2
4 anything 1
5 the other 2
6 that 2
7 this 0
8 something 1
How would I go about counting up the instances in the score
column by unique values in the term
column? 如何通过
term
列中的唯一值来计算score
列中的实例? Producing a result like: 产生如下结果:
term score 0 score 1 score 2 score 3
0 this 2 0 0 0
1 that 0 1 1 0
2 the other 0 0 1 1
3 something 0 1 1 0
4 anything 0 1 0 0
Related questions I've read here include Python Pandas counting and summing specific conditions and COUNTIF in pandas python over multiple columns with multiple conditions , but neither seems to quite be what I'm looking to do. 我在这里读到的相关问题包括Python Pandas计算和总结特定条件,以及pandas python中的COUNTIF在具有多个条件的多个列上 ,但似乎都不是我想要做的。
pivot_table
as mentioned at this question seems like it could be relevant but I'm impeded by lack of experience and the brevity of the pandas documentation. 在这个问题中提到的
pivot_table
似乎可能是相关的但是由于缺乏经验和熊猫文档的简洁性而受到阻碍。 Thanks for any suggestions. 谢谢你的任何建议。
Use groupby
with size
and reshape by unstack
, last add_prefix
: 使用
groupby
与size
和重塑unstack
,最后add_prefix
:
df = df.groupby(['term','score']).size().unstack(fill_value=0).add_prefix('score ')
Or use crosstab
: 或者使用
crosstab
:
df = pd.crosstab(df['term'],df['score']).add_prefix('score ')
Or pivot_table
: 或者
pivot_table
:
df = (df.pivot_table(index='term',columns='score', aggfunc='size', fill_value=0)
.add_prefix('score '))
print (df)
score score 0 score 1 score 2 score 3
term
anything 0 1 0 0
something 0 1 1 0
that 0 1 1 0
the other 0 0 1 1
this 2 0 0 0
You can also use, get_dummies
, set_index
, and sum
with level
parameter: 你也可以使用,
get_dummies
, set_index
,并sum
与level
的参数:
(pd.get_dummies(df.set_index('term'), columns=['score'], prefix_sep=' ')
.sum(level=0)
.reset_index())
Output: 输出:
term score 0 score 1 score 2 score 3
0 this 2 0 0 0
1 that 0 1 1 0
2 the other 0 0 1 1
3 something 0 1 1 0
4 anything 0 1 0 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.