Pandas按条件提取列值生成新列问题求助
解决方法
优先用Pandas矢量化操作(不推荐循环)
Pandas的核心优势是矢量化运算,比循环高效且不易出错,推荐以下两种方法:
方法1:使用np.where(简洁直观)
import numpy as np import pandas as pd # 假设你的DataFrame名为df df['temperature'] = np.where(df['sensor'] == 'temperature', df['timestamp'], 'not related')
逻辑:当sensor列值为'temperature'时,取当前行的timestamp值;否则填充'not related'。
方法2:使用df.loc分步赋值(更易理解)
# 先给新列统一赋值默认值 df['temperature'] = 'not related' # 筛选出sensor为temperature的行,将对应位置的temperature列替换为timestamp df.loc[df['sensor'] == 'temperature', 'temperature'] = df['timestamp']
为什么你的循环会出错?
你可能写出了类似下面的错误代码:
# 错误示例 df['temperature'] = '' for idx, row in df.iterrows(): if row['sensor'] == 'temperature': # 错误:这里把整个temperature列赋值为所有timestamp,而非当前行的单一值 df['temperature'] = df['timestamp'] else: df['temperature'] = 'not related'
即使修正为df.loc[idx, 'temperature'] = row['timestamp'],循环在处理大数据量时效率极低,所以始终优先选择矢量化方法。
内容的提问来源于stack exchange,提问作者asyy
相关产品推荐
相关产品推荐

