python使用索引从组合数据帧中选择单个数据帧数据

python使用索引从组合数据帧中选择单个数据帧数据,python,dataframe,Python,Dataframe,我有三个不同长度的数据帧。我将它们组合成一个数据帧来保存它。现在,我想使用索引从组合数据帧中检索单个数据帧数据。我的问题示例如下: df1 = data 0 10 1 20 df2 = data 0 100 1 200 2 300 df3 = data 0 1000 1 2000 2 3000 3 4000 combdf = pd.concat ([df1,df2,df3],ignore_index=True]) combdf

我有三个不同长度的数据帧。我将它们组合成一个数据帧来保存它。现在,我想使用索引从组合数据帧中检索单个数据帧数据。我的问题示例如下:

df1 = 
   data
0   10
1   20

df2 = 
   data
0   100
1   200
2   300

df3 = 
   data
0   1000
1   2000
2   3000
3   4000

combdf = pd.concat ([df1,df2,df3],ignore_index=True])

combdf = 
    data
0   10
1   20
2   100
3   200
4   300
5   1000
6   2000
7   3000
8   4000
我想从combdf中检索各个数据帧的数据。我的代码:

data_len = [len(df1),len(df2),len(df3)]
for k in range(0,len(data_len),1):
    if k==0:
        st_id = 0
    else:
        st_id = sum(data_len[:k])
    ed_id = st_id+data_len[k]
    print(combdf.iloc[st_id:ed_id])

以上代码运行良好。有比这更好的方法不用于循环吗?

在循环时,您可以先生成索引,然后使用它们进行循环,而不是计算索引

data_len = [0, len(df1),len(df2),len(df3)]
data_index = np.cumsum(data_len) #contains [0,2,5,11]
for i in range(len(data_index)-1):
    print(df.iloc[data_index[i]:data_index[i+1]])

您可以使用具有原始数据帧名称的
pd.MultiIndex
创建第二个索引列。下面您可以看到一个示例,说明如何做到这一点:

将熊猫作为pd导入
df_dict={}
df_dict['df1']=pd.数据帧([10,20])
df_dict['df2']=pd.数据帧([100200300])
df_dict['df3']=pd.数据帧([1000200030004000])
对于df_名称,df_dict.items()中的df:
#生成第二级索引
df_index_to_array=df.index.tolist()
df_index_second_level=[df_范围内i的名称(0,df.shape[0])]
df_idx_multi_index=pd.MultiIndex.from_数组([
df_索引_到_数组,
df_索引_第二级
])
df_dict[df_name]=df.set_索引(df_idx_multi_索引)
df_list=[df for u,df在df_dict.items()中]
comb_df=pd.concat(df_列表)
这将导致:

          0
0 df1    10
1 df1    20
0 df2   100
1 df2   200
2 df2   300
0 df3  1000
1 df3  2000
2 df3  3000
3 df3  4000
为了访问每个项目,您可以使用
熊猫
中的
.loc
,例如:

>>comb_df.loc[0,'df2']
0 100
名称:(0,df2),数据类型:int64