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