使用其他条件更新熊猫数据框值吗?

时间:2019-02-26 09:28:02

标签: python pandas

我想更新一个布尔值是True / False的pandas dataframe列。 JSON格式为

[
  {
   "A":"value",
   "TIME":1551052800000,
   "C":35,
   "D":36,
   "E":34,
   "F":35,
   "G":33
  },
 ...
...
]

将其转换为数据框

df = pd.DataFrame.from_dict(content)

我现在可以通过数据框以

访问原始对象中的不同列

df["TIME"] = '2019-12-0'

如果我执行上述操作,则基本上是为数据帧中的所有df [“ TIME”]设置的。我只想更新条件匹配的特定列

If df["label"].bool() == True
   then update 5 columns in x way
Else if df["label"].bool() == False
   then update 6 columns in a different way

如果没有其他条件,我会简单地运行。

       if df["label"].bool() == True:
            df["A"] = df["G"]
            if df["A"] == 0 :
                print(df["A"])
            else:
                df["C"] = (df["D"]/df["E"])*100
        elif df["label"].bool() == False:
            ....

对于1个选择它都可以正常工作,但是对于多个选择它可以返回

ValueError: The truth value of a Series is ambiguous.

注意:客户端添加了df [“ label”]列,以检查是否选择了特定行

1 个答案:

答案 0 :(得分:1)

如果我的理解正确,那么与使用if / else语句设置值相比,最好设置数据帧的相关切片(indexing)。

例如

# df = a pandas.DataFrame
df.loc[:,'A'][df['label']=='value'] = 0

注意::如果df['label']仅包含布尔值,则无需检查其值,而可以直接使用它来掩盖数据框:

df.loc[:,'A'][df['label']] = 0