python - 在另一列的值的条件下将值转换为负数
问题描述
我有一个 df,如果列中的相应值不是,我想将列b
中的值转换为负数。a
NaN
这是我的代码:
# create a test df
df = pd.DataFrame(np.array([[12, 34], [67, 98], [np.nan, 6], [23, 45], [np.nan, 5], [5, 82], [61, 92]]), columns=['a', 'b'])
print(df)
a b
0 12.0 34.0
1 67.0 98.0
2 NaN 6.0
3 23.0 45.0
4 NaN 5.0
# the code to convert b to negative if a is not NaN
df['b'] = df['b'].apply(lambda x: -x if df['a'] != pd.isnull else x)
这是收到的错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
我试图查找错误代码,但我不明白发生了什么。我正在使用 lambda 但不确定是否有更好的方法。df 应如下所示:
a b
0 12.0 -34.0
1 67.0 -98.0
2 NaN 6.0
3 23.0 -45.0
4 NaN 5.0
解决方案
我将使用combine_first
with dropna
,可能会尝试 RAW ;-)
import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([[12, 34], [67, 98], [np.nan, 6], [23, 45], [np.nan, 5], [5, 82], [61, 92]]), columns=['a', 'b'])
df['b'] = df.dropna()['b'].apply(lambda x: -x).combine_first(df['b'])
print(df)
输出
a b
0 12.0 -34.0
1 67.0 -98.0
2 NaN 6.0
3 23.0 -45.0
4 NaN 5.0
5 5.0 -82.0
6 61.0 -92.0
推荐阅读
- delphi - 德尔福 64 位 mac os 应用程序
- python - 指定如何分区 dask 数据帧?
- java - Java - 在这种情况下如何正确规避非法访问异常
- regex - 从 EventLog 消息中提取一个句子
- javascript - 如何在 JS/jQuery 中激活新创建的输入
- join - 使用 awk 进行完全外连接
- ios - 制作自定义相机,在我的 App Delegate 中收到“线程 1:信号 SIGBRT”错误
- python - 熊猫合并不匹配:第二个数据框永远不会合并?
- python-2.7 - 在亚马逊 ec2 上运行烧瓶 restplus 应用程序时得到 404
- reactjs - React.JS 无法添加 html 标签