我有三个长度不同的数据框。我将它们合并到一个数据框中进行保存。现在,我想使用索引从组合数据框中检索单个数据框数据。我的问题的示例如下:
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])
以上代码运行正常。有没有比不使用for循环更好的方法?
答案 0 :(得分:1)
您可以先生成索引,然后再使用它们进行循环,而不是在循环时计算索引。
schedule[i][0]
答案 1 :(得分:0)
您可以使用pd.MultiIndex
创建第二个索引列,其名称为原始DataFrame。您可以在下面看到如何执行此操作的示例:
import pandas as pd
df_dict = {}
df_dict['df1'] = pd.DataFrame([10, 20])
df_dict['df2'] = pd.DataFrame([100, 200, 300])
df_dict['df3'] = pd.DataFrame([1000, 2000, 3000, 4000])
for df_name, df in df_dict.items():
# Generate second level of index
df_index_to_array = df.index.tolist()
df_index_second_level = [df_name for i in range(0, df.shape[0])]
df_idx_multi_index = pd.MultiIndex.from_arrays([
df_index_to_array,
df_index_second_level
])
df_dict[df_name] = df.set_index(df_idx_multi_index)
df_list = [df for _, df in df_dict.items()]
comb_df = pd.concat(df_list)
这将导致:
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
中的pandas
,例如:
>>> comb_df.loc[0, 'df2']
0 100
Name: (0, df2), dtype: int64