根据字典对数据帧进行分组

时间:2018-01-07 20:29:40

标签: python pandas dictionary

我有一个数据框架词典df_dict。我需要根据另一个字典groups将它们连接在一起。我的数据示例如下。所有数据框都具有相同的列但行数不同。

df_dict = {'df1': pd.DataFrame([[2, 1], [3, 1]], columns=['A', 'B'], index = [1, 2]),
          'df2': pd.DataFrame([[5, 1], [6, 2], [4, 1]], columns=['A', 'B'], index = [1, 2, 3]),
          'df3': pd.DataFrame([[3, 1], [3, 6,], [2, 7], [5, 8], [8, 2]], columns=['A', 'B'], index = [1, 2, 3, 4, 5]),
          'df4': pd.DataFrame([[3, 1], [2, 7], [8, 2], [0, 2]], columns=['A', 'B'], index = [1, 2, 3, 4])}

groups = {'group1': ['df1', 'df2'], 'group2': ['df3', 'df4']}

结果new_df_dict看起来像是:

{'group1':    
   A  B
1  2  1
2  3  1
3  5  1
4  6  2
5  4  1, 
 'group2':    
   A  B
1  3  1
2  3  6
3  2  7
4  5  8
5  8  2
6  3  1
7  2  7
8  8  2
9  0  2}

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

你可以在字典理解中使用concat:

{group: pd.concat([df_dict[df] for df in dfs]) for group, dfs in groups.items()}

Out: 
{'group1':    A  B
 1  2  1
 2  3  1
 1  5  1
 2  6  2
 3  4  1, 'group2':    A  B
 1  3  1
 2  3  6
 3  2  7
 4  5  8
 5  8  2
 1  3  1
 2  2  7
 3  8  2
 4  0  2}

答案 1 :(得分:0)

我将如何做。

new_df_dict = {}
for k,v in groups.items():
    temp_df_arr = []
    for df_name in v:
        temp_df_arr.append(df_dict[df_name])

    new_df_dict[k] = pd.concat(temp_df_arr).reset_index(drop=True)
    new_df_dict[k].index = new_df_dict[k].index + 1

print(new_df_dict)