I want to split the following dataframe based on column 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
As output, I want a new DataFrame
with the N0_YLDF
column split into 4, one new column for each unique value of ZZ
. How do I go about this? I can do groupby, but do not know what to do with the grouped object.
gb = df.groupby('ZZ')
[gb.get_group(x) for x in gb.groups]
还有另一种选择,因为 groupby 返回一个生成器,我们可以简单地使用列表理解来检索第二个值(框架)。
dfs = [x for _, x in df.groupby('ZZ')]
In R there is a dataframe method called split. This is for all the R users out there:
def split(df, group):
gb = df.groupby(group)
return [gb.get_group(x) for x in gb.groups]
Store them in a dict
, which allows you access to the group DataFrames based on the group keys.
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
If you need only a subset of the DataFrame, in this case just the 'NO_YLDF'
Series, you can modify the dict comprehension.
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.