使用循环Python Pandas将数据帧子集化为单个数据帧

时间:2018-04-24 14:12:12

标签: python pandas subset

我想将数据帧子集化为单个数据帧。

所以:

df:

     name    color   value
      joe     yellow   7.0
      mary    green    9.0
      pete    blue     8.0
      mary     red     8.8
      pete     blue    7.7
      joe     orange   2.0

我想得到:

df_joe

         name    color   value
      joe     yellow   7.0
      joe     orange   2.0

df_mary

     name    color   value
      mary    green    9.0
      mary     red     8.8

df_pete

     name    color   value
      pete    blue     8.0
      pete     blue    7.7

这很容易单独和手动完成。但我想在循环中自动化它或使用`groupby'。关于如何获取此信息有很多相关的答案,但我没有找到讨论将已分解的信息保存到多个数据帧。

所以实际上这不是一个重复的问题,因为以下内容:

我试图循环这样的事情:

names = ['joe','pete','mary']
for name in names
   'df_' + name = df[df['Name'] == name]

但是我得到一个错误,将数据帧子集分配给新构造的名称。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

最好的是groupby对象创建dictionary of DataFrames

dfs = dict(tuple(df.groupby('name')))
print (dfs)
{'joe':   name   color  value
0  joe  yellow    7.0
5  joe  orange    2.0, 'pete':    name color  value
2  pete  blue    8.0
4  pete  blue    7.7, 'mary':    name  color  value
1  mary  green    9.0
3  mary    red    8.8}

print (dfs['mary'])
   name  color  value
1  mary  green    9.0
3  mary    red    8.8

但如果确实需要字符串变量(不推荐但可能):

for name, df in df.groupby('name'):
   globals()['df_' + name] = df

print (df_mary)
   name  color  value
1  mary  green    9.0
3  mary    red    8.8