python-3.x - 重塑数据框切片列
问题描述
是否有任何有效的方法来重塑数据框:
(A1、A2、A3、B1、B2、B3、C1、C2、C3、TT、YY 和 ZZ 是列)
A1 A2 A3 B1 B2 B3 C1 C2 C3 TT YY ZZ
a1 a2 a3 b1 b2 b3 c1 c2 c3 11 12 13
a4 a5 a6 b4 b5 b6 c4 c5 c6 14 15 16
a7 a8 a9 b7 b8 b9 c7 c8 c9 17 18 19
到
HH JJ KK TT YY ZZ
a1 a2 a3 11 12 13
b1 b2 b3 11 12 13
c1 c2 c3 11 12 13
a4 a5 a6 14 15 16
b4 b5 b6 14 15 16
c4 c5 c6 14 15 16
a7 a8 a9 17 18 19
b7 b8 b9 17 18 19
c7 c8 c9 17 18 19
HH、JJ 和 KK 是新列 感谢您的帮助
解决方案
wide_to_long
d = pd.wide_to_long(df, ['A', 'B', 'C'], ['TT', 'YY', 'ZZ'], 'Obs')
d.reset_index([0, 1, 2]).reset_index(drop=True)
TT YY ZZ A B C
0 11 12 13 a1 b1 c1
1 11 12 13 a2 b2 c2
2 11 12 13 a3 b3 c3
3 14 15 16 a4 b4 c4
4 14 15 16 a5 b5 c5
5 14 15 16 a6 b6 c6
6 17 18 19 a7 b7 c7
7 17 18 19 a8 b8 c8
8 17 18 19 a9 b9 c9
更多细节
pd.wide_to_long(
df, # Name of the dataframe (obviously)
['A', 'B', 'C'], # Stubnames of columns to be folded
['TT', 'YY', 'ZZ'], # Columns to broadcast
'Obs' # Name of new column/index that shows observation
)
A B C
TT YY ZZ Obs
11 12 13 1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c3
14 15 16 1 a4 b4 c4
2 a5 b5 c5
3 a6 b6 c6
17 18 19 1 a7 b7 c7
2 a8 b8 c8
3 a9 b9 c9
麻木的
a = df.iloc[:, :-3].to_numpy()
b = df.iloc[:, -3:].to_numpy()
c = a.reshape(-1, 3)
k = c.shape[0] / a.shape[0]
d = b.repeat(k, axis=0)
pd.DataFrame(np.column_stack([c, d]), columns=['HH', 'JJ', 'KK', 'TT', 'YY', 'ZZ'])
HH JJ KK TT YY ZZ
0 a1 a2 a3 11 12 13
1 b1 b2 b3 11 12 13
2 c1 c2 c3 11 12 13
3 a4 a5 a6 14 15 16
4 b4 b5 b6 14 15 16
5 c4 c5 c6 14 15 16
6 a7 a8 a9 17 18 19
7 b7 b8 b9 17 18 19
8 c7 c8 c9 17 18 19
推荐阅读
- java - 使用流 Collectors.groupingby() 重构 Java 代码
- c# - MongoDB 更改流,如何在不使用 json 格式的情况下编写不同的匹配函数
- reactjs - number 没有使用 react.js 定义
- vue.js - @input 侦听器不适用于自定义组件
- r - 如何在 R 中使用类似命名的方法创建多个 S4 类?
- quarkus - quarkus.oidc.auth-server-url 用于测试和本地主机开发
- python-3.x - Python Difflib 库将差异写入新文件
- angular - Firestore 多个 orderBy(复合索引)找不到一些结果
- base64 - ContentBuilder.js v4 Innova Studio 中的 GIF 支持
- javascript - 列包含数组和空值时的架构详细信息?