对Pandas DataFrame进行分组

时间:2018-03-22 12:13:43

标签: python pandas

有人可以分享他们如何分组以下数据框吗? 当我尝试这样做时,我最终摆弄了groupbys,stacks和lambda函数,但从未完全实现。很明显,文档中的哪些方法和示例对我尝试做的事情有帮助。

根据经验,这些东西会更直观吗?感谢关于如何选择和使用Pandas功能更流畅的任何指针或建议。

这是虚拟数据:

df = pd.DataFrame({'A':[11,11,11,12,12,12],'B':[4,5,6,3,11,12]})

   A  B
0  11  4
1  11  5
2  11  6
3  12  3
4  12  11
5  12  12

我希望显示一列中的每个原始值都在一个包含第二列值的组中。 (从下面第2组中删除的第二列中复制12)

Group 1: [11,4,5,6,12] 
Group 2: [12,3,11]

最后,为了使结果数据框具有A列中的值,并将这些组添加为列表并编号:

Col_A   Grouped_values  Group_name
11      [11,4,5,6,12]     Group 1
12      [12,3,11]         Group 2

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

IIUC需要将A的值转换为set,然后将groupby和转换的B值添加到s并转换回list s,最后添加Group_name列:

s = set(list(df['A']))
print (s)
{11, 12}

df = df.groupby('A')['B'].apply(lambda x: list(set(x) | s)).reset_index()
#thanks asongtoruin for better solution
df['Group_name'] = 'Group ' + (df.index + 1).astype(str)
print (df)
    A                  B Group_name
0  11  [12, 11, 4, 5, 6]     Group1
1  12        [11, 3, 12]     Group2