python - 尝试按名称将多组列堆叠成多个目标列
问题描述
我有像这样的原始数据框,它包含 1772 列和 130 行。我想将它们堆叠成多个目标列。
ID | AA_F1R1 | BB_F1R1 | AA_F1R2 | BB_F1R2 | ... | AA_F2R1 | BB_F2R2 | ... | AA_F7R25 | BB_F7R25 |
---|---|---|---|---|---|---|---|---|---|---|
001 | 5 | xy | xx | xx | 齐 | 1 | 4 | xx | ||
002 | 6 | zzz | 年年 | zzz | xw | 2 | zzz | 3 | zzz |
我发现了两种不同的解决方案,它们似乎可行,但对我来说却是一个错误。不确定它们是否适用于 NaN 值。
pd.wide_to_long(df, stubnames=['AA', 'BB'], i='id', j='dropme', sep='_')\
.reset_index()\
.drop('dropme', axis=1)\
.sort_values('id')
Output:
0 rows × 1773 columns
我尝试的另一个解决方案是
df.set_index('id', inplace=True)
df.columns = pd.MultiIndex.from_tuples(tuple(df.columns.str.split("_")))
df.stack(level = 1).reset_index(level = 1, drop = True).reset_index()
Output:
150677 rows × 2 columns
最后一个的问题是我无法保留我想要的列。
我很感激任何投入!
解决方案
使用suffix=r'\w+'
参数wide_to_long
:
df = pd.wide_to_long(df, stubnames=['AA','BB'], i='id', j='dropme', sep='_', suffix=r'\w+')\
.reset_index()\
.drop('dropme', axis=1)\
.sort_values('id')
dropna=False
在第二个解决方案中添加DataFrame.stack
:
df.set_index('id', inplace=True)
df.columns = df.columns.str.split("_", expand=True)
df = df.stack(level = 1, dropna=False).reset_index(level = 1, drop = True).reset_index()
推荐阅读
- javascript - 文档 execCommand 没有按预期工作
- javascript - (SDFC)登录验证导致现有用户出错,可能的解决方案?
- windows - 在公司 VM Window 10 上安装 Anaconda 时出现问题
- sql - 填空时间序列数据
- angular - Angular防止取消表单自动保存
- swift - 为什么在 UITapGestureRecognizer 之后调用 touchesCancelled?
- r - 计算给定时间空间范围内数据的百分比
- html - 在图像悬停时以圆圈设置背景大小
- powershell - 使用任务计划程序时 Ps1 脚本无法正确执行
- linux - Yocto 将目录添加到 /home/new_user