我一直在研究一个项目,我陷入了这样一种情况,我需要通过过滤来自另一个具有包含相同值的列的数据帧的字符串列表的值来从字符串列表创建多个数据帧列表。我正在编写如下代码:
df = pd.DataFrame({'A': range(1, 5), 'B': np.random.randn(4), 'C':['A',A','B','C']}
list = df.C.unique()
list = list.tolist()
for r in list:
exec('df_{}=df[df.C=={}]'.format(r))
这引发了一个错误,指出'元组索引超出范围'。有人可以快点帮忙吗?
答案 0 :(得分:0)
我建议使用dict
,因为它比exec
更安全:
uniqueC = df.C.unique()
dfs = {'df_{}'.format(r): df[df.C==r] for r in uniqueC}
现在,当您需要某个数据帧时,只需调用:
dfs['df_A']
# A B C
#0 1 1.755507 A
#1 2 -0.371027 A
答案 1 :(得分:0)
使用字典表示可变数量的变量。您可以在词典理解中使用groupby
:
dfs = {k: v for k, v in df.groupby('C')}
print(dfs['B'])
A B C
2 3 -0.785257 B
我建议你不:
list
用作变量名。exec
。for
循环。缩进在Python中很重要。答案 2 :(得分:0)
您可以将groupby
对象转换为tuple
s,然后转换为dict
s:
d = dict(tuple(df.groupby('C')))
d = dict(tuple(df.groupby('C')))
print (d['A'])
A B C
0 1 0.670449 A
1 2 -1.265135 A
print (d['B'])
A B C
2 3 -0.35891 B
print (d['C'])
A B C
3 4 0.651704 C