Pandas如何基于两个DataFrame的对应条件生成0/1哑变量
实现代码
你可以直接用pandas的向量化布尔运算完成需求,核心实现逻辑如下:
import pandas as pd # 你提供的示例初始化代码 df = pd.DataFrame({ 'a':(0,0,0,0,14,15,16,17), 'b':(20,21,22,23,24,25,26,27), 'c':(30,31,32,0,34,35,36,37), 'd':(40,41,42,43,44,0,0,47), }) dfLag = df.shift(1) # 核心逻辑:判断两个DataFrame对应位置元素均大于0,结果转整数 dummies = (df.gt(0) & dfLag.gt(0)).astype(int)
逻辑说明
df.gt(0)会生成和df维度、列名完全一致的布尔DataFrame,元素为True代表原df对应位置值大于0,否则为FalsedfLag.gt(0)同理生成dfLag的大于0判断布尔矩阵- 用
&做逐元素的逻辑与运算,只有两个矩阵对应位置都为True时结果才为True - 最后用
.astype(int)把布尔值转为整数:True转1、False转0,刚好符合你要的0/1哑变量要求
输出验证
运行后得到的dummies结果如下,和期望输出效果一致:
| 索引 | a | b | c | d |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 | 1 |
| 2 | 0 | 1 | 1 | 1 |
| 3 | 0 | 1 | 0 | 1 |
| 4 | 0 | 1 | 0 | 1 |
| 5 | 1 | 1 | 1 | 0 |
| 6 | 1 | 1 | 1 | 0 |
| 7 | 1 | 1 | 1 | 0 |
内容的提问来源于stack exchange,提问作者brb
相关产品推荐
相关产品推荐

