python - 从两个现有数据框创建两个新数据框,同时考虑它们的多索引列及其值的所有组合
问题描述
我想从两个现有数据框创建两个新数据框,同时考虑到它们的多索引列及其值的所有组合。
left = pd.DataFrame(([1,0,1], [1,0,0],[1,0,1],), columns=pd.MultiIndex.from_tuples([('A', 'B'), ('A', 'C' ), ('D','D'),]))
right = pd.DataFrame(([8,9], [8,9],[8,9],), columns=pd.MultiIndex.from_tuples([('S', 'T'), ('Y', 'Z'),]))
剩下:
A A D
B C D
0 1 0 1
1 1 0 0
2 1 0 1
正确的:
S Y
T Z
0 8 9
1 8 9
2 8 9
预期产出
左结果:
A A A A D D
B B C C D D
0 1 1 0 0 1 1
1 1 1 0 0 0 0
2 1 1 0 0 1 1
正确的结果:
S Y S Y S Y
T Z T Z T Z
0 8 9 8 9 8 9
1 8 9 8 9 8 9
2 8 9 8 9 8 9
PS:对不起,如果我的问题不够精确,但是具有预期结果的示例仍然可以最好地解释它。也许这个问题已经被问到了,但是在没有准确描述我真正想要什么样的结果(两个 DataFrame 中的组合?)的情况下,我请你帮助更准确地制定问题或将其链接为重复如果存在一个现有问题。
解决方案
在列上使用DataFrame.reindex
+ ( )Index.repeat
axis=1
# repeat 'left' columns 2 times
>>> left = left.reindex(left.columns.repeat(2), axis=1)
>>> left
A D
B B C C D D
0 1 1 0 0 1 1
1 1 1 0 0 0 0
2 1 1 0 0 1 1
# repeat 'right' columns 3 times
>>> right = right.reindex(right.columns.repeat(3), axis=1)
>>> right
S Y
T T T Z Z Z
0 8 8 8 9 9 9
1 8 8 8 9 9 9
2 8 8 8 9 9 9
# concatenate 'right' 3 times side by side (axis=1)
>>> right = pd.concat([right]*3, axis=1)
>>> right
S Y S Y S Y
T Z T Z T Z
0 8 9 8 9 8 9
1 8 9 8 9 8 9
2 8 9 8 9 8 9
推荐阅读
- c# - MVC FileStreamResult 未下载具有自定义文件名的文件
- ruby-on-rails - 锚标记未路由到 Rails 中的预期页面
- ios - 将 IndexPath 插入 NSSet 目标-C
- ios - xam.plugin.geolocator 在 ios 中不起作用
- memory-leaks - 如何检测 C++ Builder 10.4 / Android 应用程序中的泄漏
- javascript - 用 Puppeteer 覆盖 showOpenFilePicker
- sql - 仅从“已添加”/“已删除”列中查找活动项目
- c# - 使用 .BeginInvoke 启动的委托不断抛出 ThreadAbortExceptions?
- .net - 我怎样才能可靠地编辑
.Net SDK 样式 .csproj 文件中的元素? - asp.net - Asp.net webfroms Google 登录不起作用