python - 熊猫水平折叠数据框
问题描述
我对布尔值表有以下内容:
df1 = pd.DataFrame(data={'w': [True, False, False],
'x': [False, True, False],
'y': [True, True, True],
'z': [True, False, True]},
index=pd.Series([1, 2, 3], name='index'))
指数 | w | X | 是的 | z |
---|---|---|---|---|
1 | 真的 | 错误的 | 真的 | 真的 |
2 | 错误的 | 真的 | 真的 | 错误的 |
3 | 错误的 | 错误的 | 真的 | 真的 |
我创建了一个与以下宽度相同的新表df1
:
pd.DataFrame(columns=[f'column{num}' for num in range(1, len(df1.columns) + 1)])
第 1 列 | 第 2 列 | 第 3 列 | 第 4 列 |
---|
我想要做的是折叠列,df1
以便对于每一行,我只显示具有 True
值的列:
指数 | 第 1 列 | 第 2 列 | 第 3 列 | 第 4 列 |
---|---|---|---|---|
1 | w | 是的 | z | 不适用 |
2 | X | 是的 | 不适用 | 不适用 |
3 | 是的 | z | 不适用 | 不适用 |
解决方案
dot
使用and的一种方法str.split
:
import numpy as np
df2 = df1.dot(df1.columns+",")
.str.split(",", expand=True)
.replace(r'^\s*$', np.nan, regex=True)
.rename_axis(None)
df2.columns = [f'column{num}' for num in range(1, len(df2.columns)+1)]
>>> df2
column1 column2 column3 column4
1 w y z NaN
2 x y NaN NaN
3 y z NaN NaN
推荐阅读
- python - 处理 cython memoryview 切片和广播
- python - Python:在 url 列表中引用表中的所有官员姓名
- amazon-web-services - 自动检测和操作未使用的项目和资源
- nlp - 如何在没有 IOB 标签的情况下使用 Hugging Face 的转换器管道重建文本实体?
- php - 文件编译成功,但更改不会反映在控制台中
- angular - Angular 9 在组件之间共享 HTML
- php - 如何在 PHP 中获取主机名?
- javascript - 画布将图像拆分为 rgba 组件
- java - 一个真值被返回给调用者,即使没有在 return 语句中指定任何返回值
- javascript - 在该月的最后一天减去 1 个月的奇怪行为