如何使用for循环分配多个DataFrame变量?

时间:2019-04-25 10:29:32

标签: python-3.x pandas dataframe for-loop list-comprehension

我想根据列(Q14)的不同分类值划分 DataFrame,并分别为结果DataFrame命名变量。 data_int.Q14 具有4个唯一值(2、3、4、5)。如何使用for循环为DataFrame创建单独的字符串变量名称? 这是主DataFrame(data_int)的图像

fleet_type = data_int.Q14.unique()
for i in data_int.Q14:
  for uni in fleet_type:
    if i == uni:
      data_'{}'.format{uni} = data_int #I tried to assign the unique values to identify the DataFrames uniquely. 

File "<ipython-input-25-2200e7c4c3b7>", line 5
    data_'{}'.format{uni} = data_int
            ^
SyntaxError: invalid syntax

理想情况下,我想针对这种特殊情况使用列表理解功能,如下所示,

[data_int for i in data_int.Q14 if i == 2]

但是我无法定义DataFrame变量的名称。

最终,新的DataFrame应该命名如下,

fleet_data_list = ['fleet_type_{}'.format(i) for i in data_int.Q14.unique()]
fleet_data_list
  • fleet_type_2 =(new_dataframe)
  • fleet_type_3 =(new_dataframe)
  • fleet_type_4 =(new_dataframe)
  • fleet_type_5 =(new_dataframe)

我找不到使用fleet_data_list定义变量的方法。知道我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

我认为最好通过将groupby对象转换为元组然后转换为dict来创建DataFrames字典:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'Q14':[4,3,2,2,4,5],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

dfs = dict(tuple(df.groupby('Q14')))
print (dfs)
{2:    A  B  C  Q14  E  F
2  c  4  9    2  6  a
3  d  5  4    2  9  b, 3:    A  B  C  Q14  E  F
1  b  5  8    3  3  a, 4:    A  B  C  Q14  E  F
0  a  4  7    4  5  a
4  e  5  2    4  2  b, 5:    A  B  C  Q14  E  F
5  f  4  3    5  4  b}

并通过键选择:

print (dfs[2])
   A  B  C  Q14  E  F
2  c  4  9    2  6  a
3  d  5  4    2  9  b

您可能需要什么,但recommended却没有:

for i, g in df.groupby('Q14'):
    globals()['fleet_type_{}'.format(i)] = g

print (fleet_type_2 )
   A  B  C  Q14  E  F
2  c  4  9    2  6  a
3  d  5  4    2  9  b