在pandas数据框中求所有可能组合的总和

4

我有一个包含多个列的数据框,但其中两列看起来像:

number output colour
1         1    green
2         1    red
3         1    orange
4         0    green
5         1    green

我需要找到所有可能的组合以及它们出现的次数,期望的输出应该类似于:
1green    2
1red      1
1orange   1
0green    1

使用这个Python:两列的组合我找到了所有可能的组合,但是我不知道如何进行求和。或者有没有一步完成它的解决方案?

谢谢

2个回答

4

尝试:

pd.value_counts([*zip(df.output, df.colour)])

(1, green)     2
(0, green)     1
(1, orange)    1
(1, red)       1
dtype: int64

3
使用Series.value_counts对连接的列进行计数:
s = (df.output.astype(str) + df.colour).value_counts()
print (s)
1green     2
1red       1
0green     1
1orange    1
dtype: int64

也可以使用GroupBy.size

s = df.groupby(['output','colour']).size()
print (s)
output  colour
0       green     1
1       green     2
        orange    1
        red       1
dtype: int64

或者 DataFrame.value_counts 函数。
s = df[['output','colour']].value_counts()
print (s)
output  colour
1       green     2
0       green     1
1       orange    1
        red       1
dtype: int64

关于DataFrame的最后使用:

s = s.reset_index(name='count')

编辑:

对于所有组合请使用:

s = df.groupby(['output','colour']).size().unstack(fill_value=0).stack()
print (s)
output  colour
0       green     1
        orange    0
        red       0
1       green     2
        orange    1
        red       1
dtype: int64

s = df[['output','colour']].value_counts().unstack(fill_value=0).stack()
print (s)
output  colour
0       green     1
        orange    0
        red       0
1       green     2
        orange    1
        red       1
dtype: int64

2
哇!df [['output','colour']] .value_counts(),这个好新啊。他们什么时候加入了这个功能? - piRSquared
@piRSquared - 是的,完全正确。 - jezrael
1
@piRSquared 我认为v1.1+,我昨天也刚发现这个 :) - anky
@jezrael,你说得对 :) 我来自斯洛伐克。 - ZuzanaTelefony
@ZuzanaTelefony - 我很高兴,欢迎 ;) - jezrael
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接