我有一个 6k 列宽的数据框,格式为:
import pandas as pd
df = pd.DataFrame([('jan 1 2000','a','b','c',1,2,3,'aa','bb','cc'), ('jan 2 2000','d', 'e', 'f', 4, 5, 6, 'dd', 'ee', 'ff')],
columns=['date','a_1', 'a_2', 'a_3','b_1', 'b_2', 'b_3','c_1', 'c_2', 'c_3'])
df
date a_1 a_2 a_3 b_1 b_2 b_3 c_1 c_2 c_3
0 jan 1 2000 a b c 1 2 3 aa bb cc
1 jan 2 2000 d e f 4 5 6 dd ee ff
Run Code Online (Sandbox Code Playgroud)
我想:
我看过: Pandas 按名称将几组列融化成多个目标列和Pandas:多列合并成一列,但无法形成正确的解决方案。
任何建议表示赞赏
使用pd.wide_to_long和一些数据框重塑。
pd.wide_to_long(df, ['a','b','c'], 'date', 'ID', '_')\
.rename_axis('ID', axis=1)\
.stack()\
.unstack(1)\
.reset_index()
Run Code Online (Sandbox Code Playgroud)
输出:
ID date ID 1 2 3
0 jan 1, 2000 a a b c
1 jan 1, 2000 b 1 2 3
2 jan 1, 2000 c aa bb cc
3 jan 2, 2000 a d e f
4 jan 2, 2000 b 4 5 6
5 jan 2, 2000 c dd ee ff
Run Code Online (Sandbox Code Playgroud)
其中 df 是:
df = pd.DataFrame([('jan 1, 2000','a','b','c',1,2,3,'aa','bb','cc'), ('jan 2, 2000','d', 'e', 'f', 4, 5, 6, 'dd', 'ee', 'ff')],
columns=['date','a_1', 'a_2', 'a_3','b_1', 'b_2', 'b_3','c_1', 'c_2', 'c_3'])
df
Run Code Online (Sandbox Code Playgroud)
输入 df:
date a_1 a_2 a_3 b_1 b_2 b_3 c_1 c_2 c_3
0 jan 1, 2000 a b c 1 2 3 aa bb cc
1 jan 2, 2000 d e f 4 5 6 dd ee ff
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |