如何在Pandas中将行值转换为带布尔值的新列?
表格行转列:将年份值转为列并标记匹配状态
现有表格
| 名称 | 年份 |
|---|---|
| A | 2016 |
| B | 2017 |
| C | 2018 |
| D | 2019 |
目标表格
| 名称 | 2016 | 2017 | 2018 | 2019 |
|---|---|---|---|---|
| A | YES | No | No | No |
| B | No | YES | No | No |
| C | No | No | YES | No |
| D | No | No | No | YES |
转换需求
把原表格中「年份」列的每个唯一值作为新列,对应名称与年份匹配的单元格标记YES,不匹配则标记No。
实现方案
方案1:Excel/Google Sheets 操作
- 提取唯一年份作为表头
在空白单元格输入=UNIQUE(B:B)(假设年份在B列),获取所有不重复的年份,将这些值作为新的表头行。 - 设置条件标记公式
以名称A对应的2016列单元格为例,输入公式:=IF($B2=D$1,"YES","No")(D1是2016表头单元格),然后横向、纵向拖动填充所有单元格即可。
方案2:Python Pandas 代码实现
import pandas as pd # 构造原始数据 raw_data = { "名称": ["A", "B", "C", "D"], "年份": [2016, 2017, 2018, 2019] } df = pd.DataFrame(raw_data) # 添加标记列并执行行转列,填充非匹配值为No df["status"] = "YES" result_df = df.pivot(index="名称", columns="年份", values="status").fillna("No").reset_index() result_df.columns.name = None # 输出结果 print(result_df)
内容的提问来源于stack exchange,提问作者nat
相关产品推荐
相关产品推荐

