Python: 获取一个基于两列(变量)的频率计数,在熊猫数据框中出现一些行

你好,我有以下数据框。

    Group           Size
    

Short          Small
Short          Small
Moderate       Medium
Moderate       Small
Tall           Large

我想计算同一行在数据框中出现的次数。

    Group           Size      Time
    

Short          Small        2
Moderate       Medium       1
Moderate       Small        1
Tall           Large        1
158900 次浏览

你可以使用 groupby 的 size:

In [11]: df.groupby(["Group", "Size"]).size()
Out[11]:
Group     Size
Moderate  Medium    1
Small     1
Short     Small     2
Tall      Large     1
dtype: int64


In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time")
Out[12]:
Group    Size  Time
0  Moderate  Medium     1
1  Moderate   Small     1
2     Short   Small     2
3      Tall   Large     1

更新 后,大熊猫1.1 value_counts现在接受多列

df.value_counts(["Group", "Size"])

你也可以试试 pd.crosstab()

Group           Size


Short          Small
Short          Small
Moderate       Medium
Moderate       Small
Tall           Large


pd.crosstab(df.Group,df.Size)




Size      Large  Medium  Small
Group
Moderate      0       1      1
Short         0       0      2
Tall          1       0      0

编辑: 为了得到你的输出

pd.crosstab(df.Group,df.Size).replace(0,np.nan).\
stack().reset_index().rename(columns={0:'Time'})
Out[591]:
Group    Size  Time
0  Moderate  Medium   1.0
1  Moderate   Small   1.0
2     Short   Small   2.0
3      Tall   Large   1.0

其他可能性是使用 .pivot_table()aggfunc='size'

df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')

您可以使用 Pandas 中的函数 pd.cross 表() ,它的工作方式与 value _ count ()相同,但是适用于多个列。