我想将数据帧子集化为单个数据帧。
所以:
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]
但是我得到一个错误,将数据帧子集分配给新构造的名称。
我该怎么做?
答案 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