df = pd.DataFrame({'key1':list('aabba'),
'key2': ['one','two','one','two','one'],
'data1': np.random.randn(5),
'data2': np.random.randn(5)})
df
data1 | data2 | key1 | key2 | |
---|---|---|---|---|
0 | -0.014192 | 2.236780 | a | one |
1 | -0.028981 | 0.507988 | a | two |
2 | -1.168170 | -0.818003 | b | one |
3 | 0.207849 | 0.755156 | b | two |
4 | -0.457174 | -1.407547 | a | one |
g=df.groupby(["key1"])
g.head(4)
data1 | data2 | key1 | key2 | |
---|---|---|---|---|
0 | -0.014192 | 2.236780 | a | one |
1 | -0.028981 | 0.507988 | a | two |
2 | -1.168170 | -0.818003 | b | one |
3 | 0.207849 | 0.755156 | b | two |
g['data1'].head(2)
0 -0.014192 1 -0.028981 2 -1.168170 3 0.207849 Name: data1, dtype: float64
feature_bag = g['data1'].apply(lambda x:set(x)).reset_index()
feature_bag
前面的情况比较好了解,groupby返回的是一个groupby对象。它实际上还没有进行任何计算,只是含有一些有分组键的中间数据而已。
因此输出g的时候,没有变化,抽取其中一列也和直接对df操作并没有什么区别。
但是做操作:feature_bag = g['data1'].apply(lambda x:set(x)).reset_index()。
做集合的时候,是以groupby()的key1的键值作为集合的生成判断标准的。