将列分组为列表并进行计数的熊猫

问题描述 投票:0回答:1

[下面的数据框,我想按人的名字分组,将每个月的销售额加入到每个人的列表中,然后再计算每个人的出现。

enter image description here

df = pd.DataFrame([["Mike","Mike","Mike","Kate","Kate","Zeb","Zeb","Philip","Philip","Herman",],
["A4","A2","A4","A5","A6","A2","A6","A4","A4","A6"], 
["A6","A3","A3","A3","A3","A3","A6","A5","A5","A5"], 
["A3","A4","A5","A4","A6","A4","A6","A6","A5","A2"],
["A3","A5","A5","A5","A5","A4","A2","A3","A5","A2"]]).T

df.columns = ["Name",   "Jan",  "Feb",  "Mar",  "Apr"]

我在下面尝试过,但没有一个更接近所需的内容:

df_1 = pd.crosstab([df['Name']],[df['Jan'],df['Feb'],df['Mar'],df['Apr']])
df_1 = df.groupby(['Name','Jan','Feb','Mar','Apr']).size()
df_1 = df.groupby(['Name'], as_index=False)['Jan','Feb','Mar','Apr'].agg(lambda x: list(x))

所需的输出类似于:

Mike: A3(4),A4(3),A5(2),A6(2),A2(1)

什么是正确的解决方法?

谢谢。

python pandas dataframe
1个回答
0
投票

这是与建议使用@ C95的stack等效的解决方案:

df = pd.DataFrame([["Mike","Mike","Mike","Kate","Kate","Zeb","Zeb","Philip","Philip","Herman",],
["A4","A2","A4","A5","A6","A2","A6","A4","A4","A6"], 
["A6","A3","A3","A3","A3","A3","A6","A5","A5","A5"], 
["A3","A4","A5","A4","A6","A4","A6","A6","A5","A2"],
["A3","A5","A5","A5","A5","A4","A2","A3","A5","A2"]]).T

df.columns = ["Name",   "Jan",  "Feb",  "Mar",  "Apr"]

df_1 = pd.melt(df, id_vars=['Name'], value_name='A', var_name='Count' )

df_1.groupby(['Name', 'A']).count().reset_index()

    Name   A  Count
0   Herman  A2      2
1   Herman  A5      1
2   Herman  A6      1
3     Kate  A3      2
4     Kate  A4      1
5     Kate  A5      3
6     Kate  A6      2
7     Mike  A2      1
8     Mike  A3      4
9     Mike  A4      3
10    Mike  A5      3
11    Mike  A6      1
12  Philip  A3      1
13  Philip  A4      2
14  Philip  A5      4
15  Philip  A6      1
16     Zeb  A2      2
17     Zeb  A3      1
18     Zeb  A4      2
19     Zeb  A6      3
© www.soinside.com 2019 - 2024. All rights reserved.