首页 > 解决方案 > 子数据帧的子数据帧

问题描述

如果我有一个数据框 df_i 并且我想根据“循环数”的唯一值将其拆分为子数据框

我用:

dfs = {k: df_i[df_i['Cycle Number'] == k] for k in df_i['Cycle Number'].unique()}

假设“循环数”的范围为 1 到 50,并且在每个循环中,我的步长范围为 1 到 15,如何将每个数据帧拆分为 15 个进一步的数据帧?

我假设这种类型的东西会起作用:

for i in range(1,51):
    dsfs = {k: dfs[i][dfs[i]['Step Number'] == k] for k in dfs[i]['Step Number'].unique()}

但是,这只会从对应于 50 的循环数中返回 15 个数据帧,而不是之前的数据帧。

如果我想在第 20 个周期中使用步骤号 10 访问子数据帧,有没有办法生成子数据帧,以便我可以使用类似的东西访问它dfs[20][10]

一个简单的并行:

Step Number Cycle Number    Desired Access
1   1   dfs[1][1]
2   1   dfs[1][2]
3   1   dfs[1][3]
4   1   dfs[1][4]
5   1   dfs[1][5]
1   2   dfs[2][1]
2   2   dfs[2][2]
3   2   dfs[2][3]
4   2   dfs[2][4]
5   2   dfs[2][5]
1   3   dfs[3][1]
2   3   dfs[3][2]
3   3   dfs[3][3]
4   3   dfs[3][4]
5   3   dfs[3][5]
1   4   dfs[4][1]
2   4   dfs[4][2]
3   4   dfs[4][3]
4   4   dfs[4][4]
5   4   dfs[4][5]

标签: pythonpython-3.xpandasdictionarydataframe

解决方案


您可以改用元组键并利用groupby. 这是一个最小的例子:

df = pd.DataFrame([[0, 1, 2], [0, 1, 3], [1, 2, 4], [1, 2, 5], [1, 3, 6], [1, 3, 7]],
                  columns=['col1', 'col2', 'col3'])

dfs = dict(tuple(df.groupby(['col1', 'col2'])))

for k, v in dfs.items():
    print(k)
    print(v)

(0, 1)
   col1  col2  col3
0     0     1     2
1     0     1     3
(1, 2)
   col1  col2  col3
2     1     2     4
3     1     2     5
(1, 3)
   col1  col2  col3
4     1     3     6
5     1     3     7    

推荐阅读