Python Pandas技术需求:按Category条件生成DataFrame新列Cat_for_Analysis
解决Pandas中根据条件生成新列的需求
嘿,这事儿好办!你要的是根据Category列的规则生成新列Cat_for_Analysis,我给你准备了两种实用的实现方法,都能完美达到你的预期效果:
- 方法一:用
numpy.where()(推荐,性能更优)
这是矢量化操作,处理大数据集时比循环或apply高效得多,代码逻辑也简洁。
import pandas as pd import numpy as np # 构造你的原始DataFrame df = pd.DataFrame({ 'Product_ID': [32432, 24085, 54398, 97456], 'Category': ['0', 'Big Tech', 'Small Tech', '0'], 'Sub_Cat': ['Gadget', 'Computer', 'Gadget', 'Computer'] }) # 生成目标新列 df['Cat_for_Analysis'] = np.where(df['Category'] != '0', df['Category'], df['Sub_Cat'])
注意:你的原始数据里Category列的0是字符串类型,所以判断条件用!= '0';如果你的0是数值类型,直接改成!= 0即可。
- 方法二:用
pandas.DataFrame.apply()
这个方法逻辑更直观,适合快速理解,但处理大数据量时性能不如第一种方法。
df['Cat_for_Analysis'] = df.apply( lambda row: row['Category'] if row['Category'] != '0' else row['Sub_Cat'], axis=1 )
最终结果
不管用哪种方法,你都会得到符合预期的DataFrame:
| Product_ID | Category | Sub_Cat | Cat_for_Analysis |
|---|---|---|---|
| 32432 | 0 | Gadget | Gadget |
| 24085 | Big Tech | Computer | Big Tech |
| 54398 | Small Tech | Gadget | Small Tech |
| 97456 | 0 | Computer | Computer |
内容的提问来源于stack exchange,提问作者jeangelj
相关产品推荐
相关产品推荐

