如何汇总按列标题索引的行中每列的每个唯一值的计数?

时间:2018-08-08 19:50:59

标签: python pandas pandas-groupby

我有一个看起来像这样的系列:

         month_1   | month_2  | ... | month_X
user_1 | label_1   | label_2  | ... | label_2
user_2 | label_2   | label_3  | ... | label_4
.... 
user_X | label_4   | label_1  | ... | label_55

我想将其转换为如下所示的表:

month_1 | label_1 | count(label_1)
month_1 | label_2 | count(label_2)
...
month_x | label_x | count(label_x)

其中count(label_x)是该列中标签出现的次数。

我尝试了各种Pandas聚合函数,但是它们似乎都需要显式指定列名,考虑到有多少列名,我不能这样做。

1 个答案:

答案 0 :(得分:0)

这应该可以实现您想要的。

使用此示例数据:

>>> df

0    user  month_1  month_2   month_X
1  user_1  label_1  label_2   label_2
2  user_2  label_2  label_3   label_4
3  user_X  label_4  label_1  label_55
4  user_Y  label_4  label_1  label_55

df = df.drop("user", axis=1)                         # Drops unnecessary column
df = df.T                                            # Transposes data
df["month"] = df.index                               # Turns index into column
df = pd.melt(df, id_vars="month")                    # Melts data into correct shape
df = df.groupby(["month", "value"])["value"].count() # Groups by columns to get counts

>>> print(df)

month    value   
month_1  label_1     1
         label_2     1
         label_4     2
month_2  label_1     2
         label_2     1
         label_3     1
month_X  label_2     1
         label_4     1
         label_55    2