python - 来自 If-Then-Else 语句的 Pandas 系列

标签 python pandas

使用 if-then-else 语句(或类似语句)生成 Pandas 系列的最惯用方法是什么?

我有一组困惑的数据,其结构如下:

df = pd.DataFrame({
    "label": ["a","b","a","b","a","b"],
    "name": ["normal","normal","normal","special","normal","special"],
    "value": [1,2,3,4,5,6]
})

我试图通过在字典中查找 label 的值来创建一个新标签,但如果 name 值为 "特别”。

我能够使用 df.apply 进行操作:

mapping = {"a": "apple", "b": "banana"}

df["new_label"] = df.apply(
    lambda x:"pear" if x['name'] == "special" else mapping[x['label']],
    axis=1
)

但是,apply 在运行大约 60k 行数据时已经减慢了我的程序,我期待更多。是否有更惯用和矢量化的方式来执行此类操作?

最佳答案

使用numpy.wheremap :

df["new_label"] = np.where(df['name'] == "special", 'pear', df['label'].map(mapping))

print (df)
  label     name  value new_label
0     a   normal      1     apple
1     b   normal      2    banana
2     a   normal      3     apple
3     b  special      4      pear
4     a   normal      5     apple
5     b  special      6      pear

关于python - 来自 If-Then-Else 语句的 Pandas 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037179/

相关文章:

python - 检查有向无环图是否可行

python - 如果我在 api.onchange 方法中更改字段值,它不会在 View 中更新。为什么?

python - 如何获取Python中wave模块不支持的.WAV文件的持续时间?

python - pandas:read_csv仅排除某些行

python - 来自包含列表的两列的 Pandas 元组列表

python - 如果使用 Python 值随着时间的推移停留在单个值,则使用 NaN 进行更改

python - 将数据框从长格式转换为宽格式并动态命名列

python - Pandas groupby mean() 不忽略 NaN

Python:只定义一次函数

Python selenium 获取复制到剪贴板的值