我有一个看起来像这样的系列:
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聚合函数,但是它们似乎都需要显式指定列名,考虑到有多少列名,我不能这样做。
答案 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