如何将数据帧切成多个,并在不进行硬编码的情况下将其缝合到一个元组中

时间:2019-02-22 05:28:47

标签: python pandas numpy

我正在按标识符列对数据帧进行切片,并使用for循环和globals()创建子集数据帧。最后,我将所有切片的数据帧组合成一个元组。如您所见,元组创建部分是手动的,但是我需要将代码扩展到更大的数据集,并且无法手动执行,因此想将此步骤添加到我的for循环中以使 tup < / strong>,而无需输入“ tup =(TT_a,TT_b,TT_c,TT_d,TT_e)”。我只需要输出,所以请提出实现它的任何建议,不需要使用globals()

#creates dataframe
import pandas as pd
loc = [100,200,300,400,500,600,700,800,900,1000]
identifier = ['a','a','a','a','b','b','c','d','e','f']
d = {'loc':loc,'identifier':identifier}
df = pd.DataFrame(d)


#create sliced dataframe by identifier, 6 unique
for i in df['identifier'].unique():
    globals()['TT_%s' % i] = df[df['identifier'] == i].reset_index()[['loc','identifier']]
  

%谁

TT_a   TT_b    TT_c    TT_d    TT_e    TT_f    d   df  i   
identifier     loc     pd
#Final Output needed
tup = (TT_a,TT_b,TT_c,TT_d,TT_e)

1 个答案:

答案 0 :(得分:0)

首先,请不要这样使用globals ...

使用字典:

d={}
for i in df['identifier'].unique():
    if len(df.loc[df['identifier'] == i,'identifier']) > 1:
        d['TT_%s' % i] = df.loc[df['identifier'] == i, ['loc','identifier']].reset_index()