我想基于ZZ列
拆分以下数据帧df =
N0_YLDF ZZ MAT
0 6.286333 2 11.669069
1 6.317000 6 11.669069
2 6.324889 6 11.516454
3 6.320667 5 11.516454
4 6.325556 5 11.516454
5 6.359000 6 11.516454
6 6.359000 6 11.516454
7 6.361111 7 11.516454
8 6.360778 7 11.516454
9 6.361111 6 11.516454
作为输出,我想要一个新的数据帧,其中'N0_YLDF'列分为4个,每个ZZ的唯一值一个新列。我该怎么做?我可以做groupby,但不知道如何处理分组对象。
答案 0 :(得分:71)
gb = df.groupby('ZZ')
[gb.get_group(x) for x in gb.groups]
答案 1 :(得分:5)
还有另一种选择,因为groupby返回一个生成器,我们可以简单地使用list-comprehension来检索第二个值(帧)。
df = [x for _, x in df.groupby('ZZ')]
答案 2 :(得分:2)
在R中有一个名为split的数据帧方法。这适用于所有R用户:
def split(df, group):
gb = df.groupby(group)
return [gb.get_group(x) for x in gb.groups]
答案 3 :(得分:0)
将它们存储在dict
中,这使您可以基于组键访问组DataFrame。
d = dict(tuple(df.groupby('ZZ')))
d[6]
# N0_YLDF ZZ MAT
#1 6.317000 6 11.669069
#2 6.324889 6 11.516454
#5 6.359000 6 11.516454
#6 6.359000 6 11.516454
#9 6.361111 6 11.516454
如果仅需要DataFrame的一个子集(在这种情况下仅需要'NO_YLDF'
系列),则可以修改dict理解。
d = dict((idx, gp['N0_YLDF']) for idx, gp in df.groupby('ZZ'))
d[6]
#1 6.317000
#2 6.324889
#5 6.359000
#6 6.359000
#9 6.361111
#Name: N0_YLDF, dtype: float64