python - 子数据帧的子数据帧
问题描述
如果我有一个数据框 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]
解决方案
您可以改用元组键并利用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
推荐阅读
- matplotlib - 在新页面中将图形和/或文本附加到现有 pdf (python)
- java - Redisson Hibernate Cache Module 是否在多个容器中共享相同的数据?
- ios - 滑动以删除表格视图中具有多节的行?
- java - 在 ignite 中启用身份验证
- asp.net - EF 操作上的 ASP.NET MVC 异步等待。如何调试以及如何处理错误?
- ios - Xcode模拟器XS:为什么XS iPhone上的边框在截图中变成了一个矩形?
- asp.net-mvc - 如何使用 asp.net mvc 从头开始添加用户角色
- plotly - 用 plotly 从 2D 直方图填充 3D 直方图
- javascript - 在后台选项卡中打开链接而不会失去焦点
- widget - 一种使用鼠标滚动布局小部件的方法?